我有这些代码行
DataTable DTable = new DataTable();
DTable.Columns.Add("Domain");
DTable.Rows.Add("Sample");
DTable.AcceptChanges();
DGridView.DataSource = DomainTable;
此按钮用于保存更改
private void SaveDChangesButton_Click(object sender, EventArgs e)
{
foreach(DataRow dr in Dtable.Rows)
{
if(dr.RowState == DataRowState.Modified)
{
}
}
}
我的问题是,即使我修改了第一行,Rowstate
也始终返回已添加。
答案 0 :(得分:0)
RowState是一个标志枚举,多个值可以打开。
始终使用HasFlag
函数来测试值!所以改变这个:
if(dr.RowState == DataRowState.Modified)
{
// do the saving stuff
}
为此:
if(dr.RowState.HasFlag(DataRowState.Modified) )
{
// do the saving stuff
}
请注意,Added
和Modified
上的AcceptChanges
都不得被调用..:
已添加:该行已添加到DataRowCollection中,并且 AcceptChanges尚未被调用
修改:行已被修改且AcceptChanges尚未修改 调用。
如果您添加一行并让用户修改它(或在代码中执行此操作),则两个标记应 ,并且代码中的原始条件为<强>假尽管实际上已被修改了!
但如果 为行或整个表调用AcceptChanges
代码建议那么 标志都没有!