C# 从datatable中删除datarow

C# 从datatable中删除datarow,c#,datatable,datarow,C#,Datatable,Datarow,假设我有一个数据表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 rem

假设我有一个数据表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)
那么,你如何正确地做到这一点呢


谢谢。

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()(请参阅我添加的扩展示例…)谢谢,这是一个非常棒的建议。AcceptChanges()仅适用于表中存在的行!在.Delete()之后,该行仍然存在(作为DataRowState.Deleted),但不是在.Remove()之后!因此,在此sit中不需要.AcceptChanges()。