Ciao, ho provato a metter giù qualcosa, ma come mi aspettavo non mi è stato così facile raggiungere quello che volevi, comunque è un inizio e magari gli altri ragazzi quando avranno tempo di indirizzeranno meglio:
<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1"
onrowcommand="GridView1_RowCommand">
<Columns>
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:Button ID="Button1" runat="server" CausesValidation="False"
CommandArgument='<%# Eval("IDLibrary") %>'
Text="Button" />
<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False"
DataKeyNames="IDBook" DataSourceID="SqlDataSource1">
<Columns>
<asp:BoundField DataField="IDBook" HeaderText="IDBook" InsertVisible="False"
ReadOnly="True" SortExpression="IDBook" />
<asp:BoundField DataField="IdLibrary" HeaderText="IdLibrary"
SortExpression="IdLibrary" />
<asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
<asp:BoundField DataField="Author" HeaderText="Author"
SortExpression="Author" />
</Columns>
</asp:GridView>
<br />
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT * FROM [Book] WHERE ([IdLibrary] = @IdLibrary)">
<SelectParameters>
<asp:ControlParameter ControlID="Button1" Name="IdLibrary"
PropertyName="CommandArgument" Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>
<br />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT * FROM [Library]"></asp:SqlDataSource>
In sintesi, ho fatto 2 tabelle, una per le librerie e una per i libri, con una relazione 1 libreria per molti libri, ho aggiunto un template alla prima gridView. Vi ho inserito un button con il command argument bindato con il campo IDlibreria, e un secondo gridview e relativo datasource che fa la seconda query e che come parametro il commandargument del button. Naturalmente in questo caso al caricamento della prima GridView c'è il caricamento totale di tutti i dati, e la visualizzazione di tutte le grid secondarie, cosa che non va bene, la soluzione potrebbe essere quella di fare il bind della seconda gridView via codice allo scatenarsi dell'evento rowcommand. Se favoleggio correggetemi, grazie