我有一个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未被用户代码处理
答案 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;