2013-07-24 117 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