网格视图RowEditing事件验证异常

本文关键字:验证 异常 事件 RowEditing 视图 网格 | 更新日期: 2023-09-27 18:24:57

我有一个网格视图,这个网格视图是与我的数据库绑定的数据。在我的网格视图中,我有一个编辑按钮,当用户单击编辑按钮时,文本框将出现,用户可以更改网格视图中的现有文本。到目前为止,我已经完成了这一切。我制作了自己的验证方法,效果很好。然而,当我试图在FillGrid()方法之前将其应用于gvAddedEmployee_RowEditing事件时,它给了我这个错误

"对象引用未设置为对象的实例。"

在我验证方法的第一行中。

private string ValidateRow(int rowIndex, DataRow row)
    {
       string employeeID= ((TextBox)gvAddedEmployee.Rows[rowIndex].FindControl("txtEmployeeID")).Text;
      .....
     }

这是我的行编辑事件

  protected void gvAddedEmployee_RowEditing(object sender, CommandEventArgs e)
    {
        //back up before editing
        DataSet dsDetail = (DataSet)Session[GlobalVariables.SessionKey_];
        Session[GlobalVariables.SessionKey_Before_Editing] = dsDetail.Copy();
        gvAddedEmployee.EditIndex = Convert.ToInt32(e.CommandArgument);
        int rowIndex = Convert.ToInt32(e.CommandArgument);
        DataRow row = dsDetail.Tables[0].Rows[rowIndex];
        //Error
        string errMsg = ValidateRow(rowIndex, row);
        divErrorMsg.InnerHtml = errMsg;
        FillGrid();
    }

我不确定如何解决这个问题,我们将不胜感激。

这是我使用完全相同代码的另一种方法

protected void gvAddedEmployee_RowUpdating(object sender, CommandEventArgs e)
    {
        int rowIndex = Convert.ToInt32(e.CommandArgument);
        DataSet dsDetail = (DataSet)Session[GlobalVariables.SessionKey_];
        DataRow row = dsDetail.Tables[0].Rows[rowIndex];
        string errMsg = ValidateRow(rowIndex, row);
        if (errMsg.Length == 0)
        {
           //code
        }
    divErrorMsg.InnerHtml = errMsg;
    Session[GlobalVariables.SessionKey_] = dsDetail;
    FillGrid();
}

网格视图RowEditing事件验证异常

此异常背后的唯一原因是在执行这行代码期间找不到TextBox控件:

((TextBox)gvAddedEmployee.Rows[rowIndex].FindControl("txtEmployeeID")).Text;

你可以在这里查一些东西。

  • 请检查此处提供的控件ID的拼写。纠正错误
  • 分别检查rowIndexrow的值
  • 请检查您试图在其中查找控件的GridView ID。有时会使用多个GridView,我们最终会使用另一个GridView而不是正确的GridView

为了更好地进行调试,您可以尝试将TextBox代码行的查找和转换分为两部分:1.)查找GridView行对象。2.)使用该行对象查找控件。

更新:

在RowEditing事件中访问GridView之前,您可能需要重新绑定它,因为它正在失去状态,因为您可能没有使用DataSource。查看此链接以获取参考:在RowEditing Event 中查找控件

希望这能有所帮助。