2013-07-24 122 views
3

我有一个包含一些ID的列表。我想从一个DataTable中删除行,其中= ListLinkedIds根据条件从DataTable中删除行

List<string> ListLinkedIds = new List<string>(); //This has values such as 6, 8, etc. 
DataSet ds = new DataSet(); 
SqlDataAdapter da = null; 
DataTable dt = new DataTable(); 



    da = new SqlDataAdapter("SELECT TicketID, DisplayNum, TranstypeDesc, SubQueueId, EstimatedTransTime,LinkedTicketId FROM vwQueueData WHERE (DATEADD(day, DATEDIFF(day, 0, Issued), 0) = DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)) AND QueueId = @QueueId AND SubQueueId = @SubQueueId AND LinkedTicketId != @LinkedTicketId AND Called IS NULL", cs); 
    da.SelectCommand.Parameters.AddWithValue("@QueueId", Queue); 
    da.SelectCommand.Parameters.AddWithValue("@SubQueueId", SubQueue); 
    da.SelectCommand.Parameters.AddWithValue("@LinkedTicketId", ListLinkedIds[x]); 
    da.Fill(ds); 


//Removes from DataTable 
for (int x = 0; x < ListLinkedIds.Count(); x++) 
{ 
    //Remove Row from DataTable Where ListLinkedIds[x] 
} 


gvMain.DataSource = ds; 
gvMain.DataBind(); 

我试图dt.Rows.RemoveAt(删除),但只删除的行号。我想删除ListLinkedIds中的每一行。

+0

可能重复:http://stackoverflow.com/a/5648389/2524304 – FSou1

回答

8

使用LINQ,你可以创建一个新的DataTable,如:

DataTable newDataTable = dt.AsEnumerable() 
         .Where(r=> !ListLinkedIds.Contains(r.Field<string>("IDCOLUMN"))) 
         .CopyToDataTable(); 
+0

http://stackoverflow.com/questions/3396669/how-to-remove-aa-particular-row-value-from基于数据表的一种更好的选择? – Ehsan

+0

@EhsanUllah,不太确定,第二种方法是选择所有必须删除的东西,然后删除它,如果DataTable大小不够大,那么可以创建另一个DataTable副本或迭代数据表,找到该行,然后将其删除 – Habib

+0

我拥有必须在列表中删除的所有内容。 – Apollo

2

您可以选择行,然后删除返回的结果。

public void test() { 
     List<string> ListLinkedIds = new List<string>(); //This has values such as 6, 8, etc. 
     DataSet ds = new DataSet(); 
     SqlDataAdapter da = null; 
     DataTable dt = new DataTable(); 

     //Removes from DataTable 
     for (int x = 0; x < ListLinkedIds.Count(); x++) 
     { 
      DataRow[] matches = dt.Select("ID='" + ListLinkedIds[x] + "'"); 
      foreach (DataRow row in matches) { 
       dt.Rows.Remove(row); 
      } 
     } 


    } 
0

尝试Delete数据表填充后。

for (int x = 0; x < ListLinkedIds.Count(); x++) 
{ 
    foreach (DataRow dr in dt.rows) 
     { 
      if(dr["id"] == ListLinkedIds[x]) 
      dr.Delete(); 
     } 
     dt.AcceptChanges(); 
} 
+0

它只适用于第一个,当它循环时它不适用于列表中的下一个项目。 – Apollo

+0

我得到已删除的行信息无法通过该行访问。 – Apollo