【问题标题】:DataTable Rowstate always in Added stateDataTable Rowstate 始终处于已添加状态
【发布时间】:2016-05-19 09:05:47
【问题描述】:

我有这行代码

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 总是返回 Added

【问题讨论】:

  • @TanmayNehete 文章不错,但没有回答我的问题
  • 您是如何修改(编辑)DataGridView 的?你能显示更多以上的代码吗?基本上,在 DataGridView 上编辑值不会对 DataGridView 中的 DataTable 进行相同的更改。
  • 我在VS中运行时修改了runtime
  • 在哪里修改?在 DataGridView 上?
  • 数据表在DataGridView里面

标签: c# winforms datagridview datatable


【解决方案1】:

RowState 是一个标志枚举,可以打开多个值

始终使用HasFlag 函数来测试值!所以改变这个:

   if(dr.RowState == DataRowState.Modified)
   {
         // do the saving stuff
   }

为此:

   if(dr.RowState.HasFlag(DataRowState.Modified) )
   {
         // do the saving stuff
   }

请注意,AddedModified 都不能在 AcceptChanges 上调用..:

已添加:该行已添加到 DataRowCollection,并且 尚未调用 AcceptChanges

Modified : 该行已被修改且 AcceptChanges 尚未被修改 调用。

如果您添加一行并让用户修改它(或在代码中进行),那么 both 标志应该是 on 并且代码中的原始条件是 false 尽管事实上已经被修改了!

但是如果调用AcceptChanges为你的代码建议的行或整个表然后没有标志!

【讨论】:

    猜你喜欢
    • 2011-03-09
    • 2014-06-28
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多