Avatar billede TV47 Seniormester
21. april 2021 - 21:58 Der er 3 kommentarer og
1 løsning

Gridview og findcontrol

Hejsa.

Jeg har følgende kode i en Gridview Rowcommand:

if (e.CommandName.Equals("Close"))
                {                                     
                    int index = Convert.ToInt32(e.CommandArgument);
                    GridViewRow gvRow = GridView1.Rows[index];
                    int rowIndex = index;

                    (GridView1.Rows[rowIndex].FindControl("txtStart") as TextBox).Text.Trim();


Jeg får følgende fejl:
System.NullReferenceException: 'Objektreferencen er ikke indstillet til en forekomst af et objekt.'

(... as System.Web.UI.WebControls.TextBox) returned null.

Hvad gør jeg galt, sig til hvis I skal bruge mere af koden?
Avatar billede arne_v Ekspert
22. april 2021 - 01:41 #1
Et eller andet er null.

Du skal finde ud af hvad det er.

Mit gæt er at det er:

GridView1.Rows[rowIndex].FindControl("txtStart") as TextBox
Avatar billede TV47 Seniormester
22. april 2021 - 07:18 #2
<Columns>           
            <asp:Templatefield HeaderText="Kode" ControlStyle-Width="100" >
                    <ItemTemplate>
                        <asp:Label Text='<%# Eval("Kode") %>' runat="server"/>
                    </ItemTemplate>                   
                    <EditItemTemplate>
                        <asp:TextBox ID="txtKode" Text= '<%# Eval("Kode") %>' runat="server" />                           
                    </EditItemTemplate>
                    <FooterTemplate>
                        <asp:TextBox ID="txtKodeFooter" ControlStyle-Width="100" runat="server" />
                    </FooterTemplate>                     
            </asp:Templatefield>
            <asp:Templatefield HeaderText="Start" ControlStyle-Width="200">
                    <ItemTemplate>
                        <asp:Label Text='<%# Eval("Start", "{0:d}") %>' runat="server"/>
                    </ItemTemplate>                   
                    <EditItemTemplate>
                        <asp:TextBox ID="txtStart" Text= '<%# Eval("Start", "{0:d}") %>' runat="server" />                           
                    </EditItemTemplate>
                    <FooterTemplate>
                        <asp:TextBox ID="txtStartFooter" ControlStyle-Width="200" runat="server" />
                    </FooterTemplate>                     
            </asp:Templatefield>
            <asp:Templatefield>
                    <ItemTemplate>
                        <asp:ImageButton ImageUrl="/Images/Edit.png" runat="server" CommandName="Edit" ToolTip="Rediger" Width="20px" Height="20px" />
                        <asp:ImageButton ImageUrl="/Images/Delete.png" runat="server" CommandName="Delete" ToolTip="Slet" Width="20px" Height="20px" />
                        <asp:ImageButton ImageUrl="/Images/Delete.png" runat="server" CommandName="Open" ToolTip="Åbn" Width="20px" Height="20px" />
                        <asp:ImageButton Id="Close" ImageUrl="/Images/Delete.png" runat="server" CommandArgument='<%# ((GridViewRow) Container).RowIndex %>' CommandName="Close" ToolTip="Luk" Width="20px" Height="20px" />
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:ImageButton ImageUrl="/Images/Save.png" runat="server" CommandName="Update" ToolTip="Gem" Width="20px" Height="20px" />
                        <asp:ImageButton ImageUrl="/Images/Cancel.png" runat="server" CommandName="Cancel" ToolTip="Fortryd" Width="20px" Height="20px" />                     
                    </EditItemTemplate>
                    <FooterTemplate>
                        <asp:ImageButton ImageUrl="/Images/Add.png" runat="server" CommandName="Tilføj" ToolTip="Tilføj" Width="20px" Height="20px" />                     
                    </FooterTemplate>
            </asp:Templatefield>                               
        </Columns>
Avatar billede TV47 Seniormester
22. april 2021 - 07:26 #3
Min kontrol ser ud som ovenfor.

Jeg havde oprindeligt kun noget med insert, edit og delete.

Men nu har jeg lavet et par ekstra knapper (Open og Close), hvor der skal ske noget.

Jeg regnede så med at jeg kunne trykke på den linje jeg ville i mit gridview og så kunne jeg få  fat i værdierne i forskellige kolonner i de valgte linje.

Det indeks jeg har lavet, hvor koden var med fra start i denne sag, har styr på hvilke indeks, jeg selecter. De tre records jeg har har således indeks 0, 1 og 2 og jeg havde så regnet med at kunne komme i kontakt med værdierne på den record, jeg selecter.

Du har ret i Arne, at jeg nok forsøger på noget jeg ikke kan i rowcommand som giver mig return værdien null og det var den findcontrol, du nævner som er problemet. Men den findcontrol kommando virker vist kun i edit mode.

Men hvad kan jeg gøre for at opnå det jeg gerne vil.... nogen ideer?
Avatar billede TV47 Seniormester
23. april 2021 - 19:03 #4
Ah, hvis jeg får et ID defineret i min itemTemplate, der kan henvises til.
Og så iøvrigt i min FindControl skriver as Label istedet.
Så virker det.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester