【发布时间】:2012-11-08 23:16:27
【问题描述】:
所以我的网页上有这个 GridView。它是数据绑定的,因此在 RowDataBound 事件期间,这段代码运行良好:
protected void myGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
TimecardApproval shift = (TimecardApproval)e.Row.DataItem;
}
}
“shift”变量包含我需要的所有数据,效果很好。但是还有这段代码用于保存数据:
protected void btnSubmitApprovals_Click(object sender, ImageClickEventArgs e)
{
foreach (GridViewRow item in gvTimeCards.Rows)
{
TimecardApproval shift = (TimecardApproval)item.DataItem;
// code to update the row
}
}
DataItem 为空!为什么?由于该字段在那里,它为空似乎很奇怪。我应该循环其他东西吗?
【问题讨论】:
-
DataItem在数据绑定期间设置。在回发时,它始终为空,直到您再次DataBindGridView。请注意,所有变量都在页面生命周期结束时处理。btnSubmitApprovals_Click你到底需要什么?通常,您可以从 Bound-/TemplateFields 中的控件获取它。 -
@TimSchmelter 文档说:DataItem 属性仅在 GridView 控件的 RowDataBound 事件期间和之后可用。你能澄清一下“之后”部分吗?
-
@codingbiz: After 表示在同一页面生命周期中数据绑定之后(所以直到
Unload)。 -
@TimSchmelter,获取原始 DataItem 似乎是找出哪些字段已被修改的最合乎逻辑的方法。那你是说我可以在click函数中重新绑定GridView?
-
@TheGerm:不,您不能重新绑定 GridView。然后,您将覆盖所有更改并防止引发事件。您需要评估控件或使用 GridView
RowUpdating事件及其OldValues和NewValues属性。