Gridview值为参数

时间:2018-01-23 03:41:50

标签: c# asp.net gridview

我有一个Home.aspx和Home.aspx.cs

我的Home.aspx>>>

中有一个gridview
<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>

在我的Home.aspx.cs中,我有这个&gt;&gt;

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

这是我计划从gridview更新数据的地方,但在更新之前我想将旧数据传递给参数,以便用户可以比较/查看他所做的更改。为了检查目的,我可以看看它是否真的得到了数据,我将以下内容放在DataGridView_RowUpdating中(我不知道它是否错误)&gt;&gt;

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

它给了我错误: NullReferenceException未被用户代码处理

1 个答案:

答案 0 :(得分:1)

您获得NullReferenceException的原因是因为当RowUpdating事件触发时,EditItemTemplate存在但不存在ItemTemplate。

由于您在ItemTemplate中定义了pkgcode Label,因此当RowUpdating事件触发时,此标签控件不存在。但是,因为此事件触发时EditItemTemplate存在,所以您可以访问EditItemTemplate中定义的Editpkgcode文本框。

因此,您应该在RowUpdating事件中使用以下代码,以便访问EditItemTemplate中的文本框。

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