我有一个DataViewGrid,我从查询中的DataTable填充到数据库。在尝试捕获Row_Leave事件时,我可以正确地更新它,我似乎无法捕获布尔列中的最新值。
如果我只更新一个文本字段,当我访问基础DataSource时,我得到了我输入的最新值,如果我访问布尔值,则买,我得到之前的值。
我正在访问这样的行:
if (allCorrect)
{
if (((DataRowView)dgView.Rows[e.RowIndex].DataBoundItem).IsNew)
{
this.InsertEntry((DataRow)((DataRowView)dgView.Rows[e.RowIndex].DataBoundItem).Row);
}
else
{
this.UpdateEntry((DataRow)((DataRowView)dgView.Rows[e.RowIndex].DataBoundItem).Row);
}
}
(非常复杂的方式来访问底层行,但就像访问DGV的DataSource一样,所以这不是问题。)
有什么想法吗?
编辑:我已将问题缩小到适当的事件调用。似乎 RowLeave 在 EndCellEdit 之前被调用,甚至 CellValueChanged 。因此,该行永远不会获得状态更新(在DB中更新)并且不会执行此操作。我可以更改这些事件的顺序(以便正常工作)吗?我发现这是一个known issue,应该在Orcas中改变,但他们从未这样做过。
答案 0 :(得分:3)
好的,有一个解决方法。
检查后需要更新:
if(!(dgView.IsCurrentCellDirty))
{
return;
}
我做了一个CommitEdit来应用单元格的更改(由于上述错误,事件尚未发生)
dgView.CommitEdit(0);
当更新/插入发生时,该行将获得最新值。