读书人

删除DataTable中除指定行以外的行,该如

发布时间: 2012-05-16 23:40:10 作者: rapoo

删除DataTable中除指定行以外的行
假设有一个DataTable的数据如下所示:

ID NAME MEMO
1 AA 1111
2 BB 2222
3 CC 3333
4 DD 4444
5 EE 5555
6 FF 6666
7 GG 7777
.. .. ....

要删除ID包含在集合(1,3,5,6,......)中以外的行,
也就是说保留ID包含在集合(1,3,5,6,......)中的行,其他的行删除.

[解决办法]
dt.Rows[i].Delete()
i你知道的
[解决办法]
DELETE FROM table WHERE id NOT IN (...)
[解决办法]
你可以用DataView过滤!就可以只看你要的数据!

C# code
private void BindDataGrid(){    DataTable table = new DataTable();    // Insert code to populate a DataTable with data.    // Bind grid to DataTable.    dataGrid1.DataSource = table;}private void ChangeRowFilter(){    DataTable gridTable = (DataTable) dataGrid1.DataSource;    // Set the RowFilter to display a company names that     // begin with A through I..    gridTable.DefaultView.RowFilter = "CompanyName < 'I'";}
[解决办法]
探讨
DELETE FROM table WHERE id NOT IN (...)

[解决办法]
DELETE FROM table WHERE id NOT IN (1,3,5,6,......)
这个就可以
[解决办法]
C# code
private void button1_Click(object sender, EventArgs e){    string[] ids="1,3,5".Split(',');    DataTable dt = new DataTable();    dt.Columns.Add("ID");    dt.Columns.Add("NAME");    dt.Columns.Add("MEMO");    dt.Rows.Add("1", "AA", "1111");    dt.Rows.Add("2", "BB", "1111");    dt.Rows.Add("3", "CC", "1111");    dt.Rows.Add("4", "DD", "1111");    dt.Rows.Add("5", "EE", "1111");    for (int i = dt.Rows.Count - 1; i >= 0; i--)    {        if (Array.IndexOf(ids,dt.Rows[i]["id"].ToString())>=0)        {            dt.Rows[i].Delete();         }    }}
[解决办法]
view.Table = DataSet1.Tables["Suppliers"];
view.AllowDelete = true;
view.AllowEdit = true;
view.AllowNew = true;
view.RowFilter = "ID NOT IN '1,2,3,4,5,6'";

[解决办法]
C# code
view.Table = DataSet1.Tables["Suppliers"];  view.AllowDelete = true;  view.AllowEdit = true;  view.AllowNew = true;  view.RowFilter = "ID NOT IN '1,2,3,4,5,6'";
[解决办法]
C# code
            DataTable dt = new DataTable("Data");            dt.Columns.Add("Id", typeof(int));            dt.Columns.Add("Name", typeof(string));            dt.Rows.Add(1, "小三1");            dt.Rows.Add(2, "小三2");            dt.Rows.Add(3, "小三3");            dt.Rows.Add(4, "小三4");            dt.Rows.Add(5, "小三5");            dt.Rows.Add(6, "小三6");            dt.Rows.Add(7, "小三7");            //保留的行            string[] ids = { "1", "3", "5" };            // 获取删除的行集合            DataRow[] drsDel = dt.Select(string.Format("Id not in ({0})", string.Join(",", ids)));            //直接在集合中删除            foreach (DataRow drDel in drsDel)            {                dt.Rows.Remove(drDel);            } 


[解决办法]
学习,帮顶!~
[解决办法]
帮你顶
[解决办法]
for (int j = 0; j < myDataRowsError.Length; j++)
{
//m_myDataSet.Tables[m_strMyDataSource].Rows.Remove(myDataRowsError[j]);//如果用这句数据库里的数据并没有删除掉
myDataRowsError[j].Delete();//用这句数据库里的数据才会删除掉
}

集合内删除,这种写法就不对。 Delete()能删除也是侥幸,出错的地方没让你遇上。
[解决办法]
"调用了Update可是Remove数据里就是没删除掉用Delete就可以,非常奇怪"
-------------
如果要Update更新数据库,要调用 Delete() 方法才行,并且之后不能调用 AcceptChanges() 方法;
-------------
MSDN:
Remove()方法:当移除行时,该行中的所有数据都将丢失。还可以调用 DataRow 类的 Delete 方法来标记某行以供移除。调用 Remove 等同于先调用 Delete 再调用 AcceptChanges。


[解决办法]

C# code
string[] ids="1,3,5".Split(',');             // 需要删除的ID号,存入数据组for (int i = dt.Rows.Count - 1; i >= 0; i--) // 集合元素删除操作,倒序删除{    if (Array.IndexOf(ids,dt.Rows[i]["id"].ToString())>=0) // 当前id号是否属于删除范围    {        dt.Rows[i].Delete();     }} 

读书人网 >C#

热点推荐