Ciao a tutti, sono l'ennesimo emigrante che sta passando a .NET e mi sta anche piacendo.
L'unica cosa che mi fa sclerare è che in asp3.0 trovavo tonnellate di esempi da studiare e quì, invece, trovo pochissimo e i libri che ho comprato danno solo un'antipasto dei concetti chiave della programmazione.
Così, dopo innumerevoli sforzi vengo a genuflettermi e a implorare aiuto.

Ho bisogno di annidiare 2 gridview:
- quella 'Master' si popola facendo una query su 'miaTabella' con un DISTINCT in base a 3 campi (boxWidth, boxLeght e nLayer)
- quella child fa una query sulla stessa tabella mostrando (senza DISTINCT stavolta) solo i record che hanno in comune i 3 suddetti campi con la riga della gridView 'Master' che la contiene.

Vorrei sapere se ho adottato il metodo giusto e, soprattutto, come mai nella 'Child' gridView non riesco a far funzionare l'Update (L'Insert lo devo ancora fare ).
Non restituisce errori ma non aggiorna i contenuti dei campi nel db (e neppure a video quindi) coi nuovi valori inseriti nelle textBox in fase di editing.

Tutto sulla Master funziona con gli stessi principi: Insert, Update, Delete.
Sulla Child funziona solo il Delete

Ecco il codice del TemplateFiled contenente la Child:
codice:
<asp:TemplateField HeaderText="Configurazioni">
    <ItemTemplate>
        <input id="HiddenBW" type="hidden" runat="server" value='<%# Eval("boxWidth") %>'/>
        <input id="HiddenBL" type="hidden" runat="server" value='<%# Eval("boxLEnght") %>'/>
        <input id="HiddenNL" type="hidden" runat="server" value='<%# Eval("nLayer") %>'/>
        <asp:GridView ID="gridViewConfigurations" DataSourceID="ConfigurationsSource" runat="server"  CssClass="testomedio" Width="600px"
        AllowPaging="True"
        PageSize="25" 
        AllowSorting="True"
        AutoGenerateColumns="False"
        EmptyDataText="No records found" 
        DataKeyNames="IDcounter"
        OnSelectedIndexChanged="gridViewEvapco_SelectedIndexChanged"
        PagerSettings-Mode="NumericFirstLast"
        GridLines="None"
        Visible = "False">
        <RowStyle CssClass="GridItem" />
        <HeaderStyle CssClass="GridHeader" />
        <AlternatingRowStyle CssClass="GridAltItem" />
        <PagerStyle CssClass="GridPager" HorizontalAlign="Center" /> 
            <Columns>
                <asp:TemplateField HeaderText="Qt." SortExpression="qty">
                    <ItemTemplate>
                        <asp:Label ID="lblQty" Runat="Server"><%# Eval("qty") %></asp:Label>
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:TextBox ID="tbUpdateQty" runat="server" CssClass="userInput" Width="30px" Text='<%# Bind("qty") %>'></asp:TextBox>
                    </EditItemTemplate>                    
                    <FooterTemplate>
                        <asp:TextBox ID="tbInsertQty" CssClass="userInput" Width="30px" Runat="server"></asp:TextBox>
                    </FooterTemplate>
                    <ItemStyle Width="50px" />
                </asp:TemplateField>    
                
                ...altri TemplateField con altri campi...
        
                <asp:TemplateField ShowHeader="False">
                    <ItemTemplate>
                        <asp:LinkButton ID="btnEditConfigurations" runat="server" CausesValidation="False" CommandName="Edit" Text="Edit">[img]images/mod.gif[/img]</asp:LinkButton>
                        <asp:LinkButton ID="btnDeleteConfigurations" runat="server" CausesValidation="False" CommandName="Delete" OnClientClick="return confirm('Confermi di voler cancellare questo record?')" Text="Delete">[img]images/canc.gif[/img]</asp:LinkButton>
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:LinkButton ID="btnSaveConfigurations" runat="server" CausesValidation="False" OnClientClick="return checkForm()"  CommandName="Update" Text="Update">[img]images/disk.png[/img]</asp:LinkButton>
                        <asp:LinkButton ID="btnCancelConfigurations" runat="server" CausesValidation="False" CommandName="Cancel" Text="Cancel">[img]images/cross.png[/img]</asp:LinkButton>
                    </EditItemTemplate>
                    <FooterTemplate>
                        <asp:LinkButton ID="btnSaveNewRecordConfigurations" runat="server" Text="Add" OnClick="btnSaveNewRecord_Click">[img]images/disk.png[/img]</asp:LinkButton>
                        <asp:LinkButton ID="btnCancelNewRecordConfigurations" runat="server" Text="Cancel" OnClick="btnCancelNewRecord_Click">[img]images/cross.png[/img]</asp:LinkButton>
                    </FooterTemplate>
                    <ItemStyle Width="40px" />
                </asp:TemplateField> 
                                                       
            </Columns>
            <PagerSettings Mode="NumericFirstLast" />
        </asp:GridView>
        <asp:Button ID="btnAddChildRecord" CssClass="userButton" Runat="server" Text="Aggiungi configurazione" OnClick="btnAddChildRecord_Click" />
        
        <asp:SqlDataSource ID="ConfigurationsSource" runat="server" ConnectionString='Provider=Microsoft.Jet.OLEDB.4.0;Data Source="mioPercorso/mioDatabase"' ProviderName="System.Data.OleDb"  OldValuesParameterFormatString="original_{0}"
            SelectCommand="SELECT * FROM [Tabella] where ([boxWidth]=@boxWidth And [boxLenght]=@boxLenght And [nLayer]=@nLayer)" 
            DeleteCommand="DELETE FROM [Tabella] WHERE ([IDcounter] = @IDcounter)" 
            InsertCommand="INSERT INTO [Tabella] (qty, ...altriCampi...)VALUES(@qty, ...altriValori...)" 
            UpdateCommand="UPDATE [Tabella] SET [qty] = @qty, ...altriCampi... where ([IDcounter] = @IDcounter)">
            <InsertParameters>
                <asp:Parameter Name="qty" />
            </InsertParameters>
            <SelectParameters>
                <asp:ControlParameter ControlID="HiddenBW" Name="boxWidth" PropertyName="Value" Type="String" />
                <asp:ControlParameter ControlID="HiddenBL" Name="boxLenght" PropertyName="Value" Type="String" />
                <asp:ControlParameter ControlID="HiddenNL" Name="nLayer" PropertyName="Value" Type="Int32" />
            </SelectParameters>
            <UpdateParameters>
                <asp:Parameter Type="String" Name="qty"></asp:Parameter>
            </UpdateParameters>
        </asp:SqlDataSource>                                        
            
    </ItemTemplate>
    <ItemStyle Width="660px" />
</asp:TemplateField>

Allego, per chiarezza, anche il codice funzionante del dataSource della Master:
codice:
<asp:SqlDataSource ID="CodesSource" runat="server" ProviderName="System.Data.OleDb" ConnectionString='Provider=Microsoft.Jet.OLEDB.4.0;Data Source="mioPercorso\mioDatabase"' OldValuesParameterFormatString="original_{0}"
    SelectCommand="Select DISTINCT boxWidth, boxLenght, nLayer from [miaTabella] order by boxWidth, boxLenght, nLayer"
    UpdateCommand="Update [miaTabella] SET [boxWidth]=@boxWidth, [boxLenght]=@boxLenght, [nLayer]=@nLayer where ([boxWidth]=@original_boxWidth And [boxLenght]=@original_boxLenght And [nLayer]=@original_nLayer)" 
    DeleteCommand="Delete from [miaTabella] where ([boxWidth]=@boxWidth And [boxLenght]=@boxLenght And [nLayer]=@nLayer)" 
    InsertCommand="INSERT INTO [miaTabella] ([boxWidth],[boxLenght],[nLayer]) VALUES (@boxWidth,@boxLenght,@nLayer)">
    <InsertParameters>
        <asp:Parameter Type="String" Name="boxWidth"></asp:Parameter>
        <asp:Parameter Type="String" Name="boxLenght"></asp:Parameter>
        <asp:Parameter Type="String" Name="nLayer"></asp:Parameter>
    </InsertParameters>
</asp:SqlDataSource>

Preferirei un'approccio il meno programmatico possibile perchè a lavori ultimati dovrò passare il codice ad una persona che ne sa pochissimo di programmazione e si troverebbe molto meglio se dovessi spiegargli soltanto i principi di funzionamento dei controlli 'builtin' di asp.net

Grazie a tutti quelli che mi aiuteranno a sorpassare questo ostacolo che mi sta tenendo da 4 giorni incollato al monitor fino a notte fonda