【问题标题】:delete datarow from datatable从数据表中删除数据行
【发布时间】:2011-04-28 06:47:56
【问题描述】:

假设我有一个数据表 dt(它包含广告商),我想从 dt 中删除广告商 ID 等于一个值的行,我该怎么做?

DataTable dt = new DataTable();
//populate the table
dt = DynamicCache.GetAdvertisers();

//I can select a datarow like this:
DataRow[] advRow = dt.Select("advertiserID = " + AdvID);

//how do you remove it, this get's me an error
dt.Rows.Remove(advRow)

那么你如何正确地做到这一点?

谢谢。

【问题讨论】:

标签: c# datatable datarow


【解决方案1】:

advRow 是一个数组。您必须确定要删除数组中的哪一行。

dt.Rows.Remove(advRow[0]);

当然,这只是将它从数据表中删除,不一定是它背后的数据源(sql、xml、...)。这将需要更多...

最好在选择后检查数组或迭代数组...

var datatable = new DataTable();
            DataRow[] advRow = datatable.Select("id=1");
            datatable.Rows.Remove(advRow[0]);
            //of course if there is nothing in your array this will get you an error..

            foreach (DataRow dr in advRow)
            {
                // this is not a good way either, removing an
                //item while iterating through the collection 
                //can cause problems.
            }

            //the best way is:
            for (int i = advRow.Length - 1; i >= 0; i--)
            {
                datatable.Rows.Remove(advRow[i]);
            }
            //then with a dataset you need to accept changes
            //(depending on your update strategy..)
            datatable.AcceptChanges();

【讨论】:

  • 啊,这正是我丢失的信息 - 非常感谢。之后需要做 dt.acceptchanges 吗?
  • @flavour404,根据您的更新策略,是的...在某些时候您需要执行.AcceptChanges();(请参阅我添加的扩展示例...)
  • 感谢 Cos,这是很棒的建议。
  • .AcceptChanges() 仅适用于表中存在的行!在 .Delete() 之后,该行仍然存在(作为 DataRowState.Deleted),但在 .Remove() 之后不存在!所以 .AcceptChanges() 在这个位置是没有必要的。
猜你喜欢
  • 2020-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多