itsmePJ
itsmePJ

Reputation: 43

Gridview value to a parameter

I have a Home.aspx and Home.aspx.cs

I have a gridview in my Home.aspx >>>

<asp:GridView ID="DataGridView" runat="server" AutoGenerateColumns="False" ShowFooter="True" 
                        CellPadding="4" ForeColor="#333333" GridLines="None" Height="281px" style="margin-top: 0px" Width="100%" 
                        OnRowCancelingEdit="DataGridView_RowCancelingEdit"  
                        OnRowEditing="DataGridView_RowEditing" OnRowUpdating="DataGridView_RowUpdating" HorizontalAlign="Center" 
                        onrowdatabound="DataGridView_RowDataBound">

                        <AlternatingRowStyle BackColor="Lavender" ForeColor="#284775" />

                        <Columns>
                             <asp:TemplateField>
                                <HeaderTemplate>Data 1</HeaderTemplate>
                                <ItemStyle HorizontalAlign="Center"></ItemStyle>
                                <ItemTemplate><asp:Label ID="description" runat="server" Text='<%# Bind("description")%>'></asp:Label></ItemTemplate>
                                <EditItemTemplate>
                                    <asp:DropDownList ID="Editdescription" runat="server">
                                        <asp:ListItem>--Select--</asp:ListItem>
                                        <asp:ListItem>SINGLE</asp:ListItem>
                                        <asp:ListItem>DOUBLE</asp:ListItem>
                                    </asp:DropDownList>
                                </EditItemTemplate>
                               <%-- <FooterTemplate>
                                </FooterTemplate>--%>
                            </asp:TemplateField>

                            <asp:TemplateField>
                                <HeaderTemplate>Data 2</HeaderTemplate>
                                <ItemStyle HorizontalAlign="Center"></ItemStyle>
                                <ItemTemplate><asp:Label ID="pkgcode" runat="server" Text='<%# Bind("pkgcode") %>'></asp:Label></ItemTemplate>
                                <EditItemTemplate><asp:TextBox ID="Editpkgcode" runat="server" Text='<%# Bind("pkgcode") %>'></asp:TextBox></EditItemTemplate>
                                <%--<FooterTemplate><asp:TextBox ID="pkgcode" runat="server"></asp:TextBox></FooterTemplate>--%>
                            </asp:TemplateField>

                            <asp:TemplateField>
                                <HeaderTemplate>Data 3</HeaderTemplate>
                                <ItemStyle HorizontalAlign="Center"></ItemStyle>
                                <ItemTemplate><asp:Label ID="oprcode" runat="server" Text='<%# Bind("oprcode") %>'></asp:Label></ItemTemplate>
                                <EditItemTemplate><asp:TextBox ID="Editoprcode" runat="server" Text='<%# Bind("oprcode") %>' ></asp:TextBox></EditItemTemplate>
                                <%--<FooterTemplate><asp:TextBox ID="oprcode" runat="server"></asp:TextBox></FooterTemplate>--%>
                            </asp:TemplateField>

                        </Columns>

                    </asp:GridView>

In my Home.aspx.cs, I have this >>

protected void DataGridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
        { } 

This is where I plan to update my data from my gridview, but before updating I want to pass the old data to a parameter so user can compare/see the changes he made. For checking purposes so I can see if it really get the data, I put the following inside DataGridView_RowUpdating (and I don't know if it's wrong)>>

GridViewRow row = DataGridView.Rows[e.RowIndex];
string @editpkgcode = (row.FindControl("pkgcode") as Label).Text;
Literal1.Text = "TEST: " + @editpkgcode;

It gives me the error : NullReferenceException was unhandled by user code

Upvotes: 0

Views: 346

Answers (1)

Sunil
Sunil

Reputation: 21396

The reason why you get NullReferenceException is because when RowUpdating event fires then the EditItemTemplate exists but not ItemTemplate.

Since you defined pkgcode Label in ItemTemplate, therefore this label control is not existing when RowUpdating event fires. But, because the EditItemTemplate exists when this event fires, so you can access the Editpkgcode textbox defined in EditItemTemplate.

Therefore, you should be using the following code in your RowUpdating event in order access the textbox in EditItemTemplate.

GridViewRow row = DataGridView.Rows[e.RowIndex];
string @editpkgcode = (row.FindControl("Editpkgcode") as TextBox).Text;

Upvotes: 1

Related Questions