C# 无法在ASP.NET C中更新GridView#

C# 无法在ASP.NET C中更新GridView#,c#,asp.net,gridview,C#,Asp.net,Gridview,我正在尝试更新并显示我的网格视图中的值。它所做的是获取标签中的值,并在我尝试更新它时切换到TextBox。之后,我想在GridView之外的标签中显示该特定值 <ItemTemplate> <asp:Label ID="Label4" runat="server" Text='<%#Eval("Product_Quantity") %>'></asp:Label> </ItemTemplate> <EditItemTemp

我正在尝试更新并显示我的网格视图中的值。它所做的是获取标签中的值,并在我尝试更新它时切换到TextBox。之后,我想在GridView之外的标签中显示该特定值

<ItemTemplate>
    <asp:Label ID="Label4" runat="server" Text='<%#Eval("Product_Quantity") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
    <asp:TextBox ID="TextBox2" runat="server" Text='<%#Eval("Product_Quantity") %>'></asp:TextBox>
</EditItemTemplate>

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    dt = new DataTable();
    dt = (DataTable)Session["anime"];

    dt.Rows[e.RowIndex]["Product_Quantity"] = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox2")).Text;

    Session["anime"] = dt;
    GridView1.EditIndex = -1;

        FillGrid();


    Response.Redirect("view_cart.aspx");
}



protected void GridView1_RowDataBound1(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        DataRowView drv = e.Row.DataItem as DataRowView;
        if (drv != null)
        {
            sum += Convert.ToInt32(((Label)e.Row.Cells[4].FindControl("Label4")).Text);
            results.Text = sum.ToString();
        }
    }


}

受保护的无效GridView1_行更新(对象发送方,GridViewUpdateEventArgs e)
{
dt=新数据表();
dt=(数据表)会话[“动画”];
dt.Rows[e.RowIndex][“产品数量”]=((文本框)GridView1.Rows[e.RowIndex].FindControl(“TextBox2”)).Text;
会话[“动画”]=dt;
GridView1.EditIndex=-1;
FillGrid();
重定向(“view_cart.aspx”);
}
受保护的void GridView1_RowDataBound1(对象发送方,GridViewRowEventArgs e)
{
如果(e.Row.RowType==DataControlRowType.DataRow)
{
DataRowView drv=e.Row.DataItem作为DataRowView;
如果(drv!=null)
{
sum+=Convert.ToInt32(((Label)e.Row.Cells[4].FindControl(“Label4”).Text);
results.Text=sum.ToString();
}
}
}
每当我尝试更新行时,它都会返回:“对象引用未设置为对象的实例。”atsum+=Convert.ToInt32(((Label)e.row.Cells[4].FindControl(“Label4”).Text)


有什么办法解决这个问题吗?

编辑行时,将使用EditTemplate。在这个世界上没有标签。因此无法找到控件,代码将抛出异常。然后必须搜索TextBox2控件

<EditItemTemplate>
    <asp:TextBox ID="TextBox2" runat="server" Text='<%#Eval("Product_Quantity") %>'></asp:TextBox>
</EditItemTemplate>

编辑行时,将使用EditTemplate。在这个世界上没有标签。因此无法找到控件,代码将抛出异常。然后必须搜索TextBox2控件

<EditItemTemplate>
    <asp:TextBox ID="TextBox2" runat="server" Text='<%#Eval("Product_Quantity") %>'></asp:TextBox>
</EditItemTemplate>

我通过执行以下操作解决了此问题:-

 protected void GridView1_RowDataBound1(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow && e.Row.RowState == DataControlRowState.Edit)
    {


    }

    else if (e.Row.RowType == DataControlRowType.DataRow)
    {
        sum += Convert.ToInt32(((Label)e.Row.Cells[4].FindControl("Label4")).Text);
        results.Text = sum.ToString();

    }

}

我通过以下方法解决了这个问题:-

 protected void GridView1_RowDataBound1(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow && e.Row.RowState == DataControlRowState.Edit)
    {


    }

    else if (e.Row.RowType == DataControlRowType.DataRow)
    {
        sum += Convert.ToInt32(((Label)e.Row.Cells[4].FindControl("Label4")).Text);
        results.Text = sum.ToString();

    }

}

您在哪一行获得异常?位于:sum+=Convert.ToInt32(((Label)e.Row.Cells[4].FindControl(“Label4”).Text);您确定行的第四个单元格包含标签吗。单元格的索引从0开始。是的,它是。代码运行时没有任何问题,除非我选择编辑行。从那里,将引发异常。调试代码以找出哪个项为null,我猜是Label4,因为它是只读标记。在哪一行获得异常?位于:sum+=Convert.ToInt32(((Label)e.Row.Cells[4].FindControl(“Label4”).Text);您确定行的第四个单元格包含标签吗。单元格的索引从0开始。是的,它是。代码运行时没有任何问题,除非我选择编辑行。然后,将抛出异常。调试代码以找出哪个项为null,我猜是Label4,因为它是一个只读标记。