网格视图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();
}
此异常背后的唯一原因是在执行这行代码期间找不到TextBox控件:
((TextBox)gvAddedEmployee.Rows[rowIndex].FindControl("txtEmployeeID")).Text;
你可以在这里查一些东西。
- 请检查此处提供的控件ID的拼写。纠正错误
- 分别检查
rowIndex
和row
的值 - 请检查您试图在其中查找控件的GridView ID。有时会使用多个GridView,我们最终会使用另一个GridView而不是正确的GridView
为了更好地进行调试,您可以尝试将TextBox代码行的查找和转换分为两部分:1.)查找GridView行对象。2.)使用该行对象查找控件。
更新:
在RowEditing事件中访问GridView之前,您可能需要重新绑定它,因为它正在失去状态,因为您可能没有使用DataSource。查看此链接以获取参考:在RowEditing Event 中查找控件
希望这能有所帮助。