Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [2.0] update/insert su child gridView

    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

  2. #2
    Bene, ci ho lavorato sopra altre 9 ore (ore diurne di una caldissima Domenica di Luglio ) senza ottenere nulla

    Come mai non si trova neanche un'esempio in italiano di sta roba?

    Ho cercato e ricercato in tutti i pochi esempi di nested Gv in inglese senza trovare un cavolo di posto che permettesse di apprendere veramente la tecnica giusta. O c'è troppo codice, bindando anche i dati e tutte le varie opzioni della master, o troppo poco, facendo vedere una nested messa lì ...senza manco un comando a disposizione

    Ci starò sopra anche tutta la notte perchè se domani mattina non so far funzionare almeno l'Update di una gridView annidata il mio capo mi obbligherà ad abbandonare asp.net e a finire il progetto corrente in asp 3.0 senza darmi, così, la tanto agognata possibilità di aggiornarmi a .net
    Se apprendessi questa cavolo di tecnica finirei l'applicazione in un baleno

    Spero che qualche guru si faccia vivo ad illuminarmi

  3. #3
    Rieccomi, ho trovato il modo di scavalcare l'ostacolo e così il mio capo mi ha dato, finalmente, il permesso di finire il progetto in ASP.NET ...e quindi di impararlo.

    La soluzione che ho trovato è una vera e propria 'bestemmia informatica': l'iframe :rollo:

    Le gridView annidiate le metto in un iframe a cui passo i parametri della master gridView tramite querystring e questa, la child, si comporta benissimo con tutte le sue features perchè (credo) in questo modo non soffre più dell'influenza dei vari rebinding della master.

    In questa immagine le gridviews non sono annidate ma quella sotto dipende dal selectedIndex di quella sopra ....funzionano entrambe quasi completamente senza codice.

    Ho notato che per rendere editabile una gridView annidata bisognerebbe scrivere tantissimo codice ed è una cosa che, in questo momento, non posso permettermi.
    So che la mia soluzione è da censurare ma spero che possa aiutare chi, come me, è in una situazione talmente disperata di tempistica da accettare qualsiasi compromesso.

    Sarei sempre curioso di sapere cosa ne pensano gli esperti, visto che io lavoro in .net solo da due settimane e quindi ....brancolo nel buio

    Mentre porto avanti il progetto cercherò di imparare la tecnica giusta... se ce la facessi ripasso e la condivido ma ripeto che sono disperatamente a caccia di consigli di esperti.

    Ciao.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.