网格视图RowEditing事件验证异常

时间:2015-11-30 05:46:39

标签: c# asp.net gridview

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

  

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

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

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

这是我的RowEditing事件

  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();
}

1 个答案:

答案 0 :(得分:1)

此异常背后的唯一原因是在执行此行代码时未找到TextBox控件:

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

你可以在这里检查一些事情。

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

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

更新:

看起来你可能需要在RowEditing事件中访问它之前重新绑定你的GridView,因为它可能没有使用DataSource而失去它的状态。请查看此链接以获取参考:Finding control in RowEditing Event

希望这有帮助。