【问题标题】:Remove Row from DataTable Depending on Condition根据条件从 DataTable 中删除行
【发布时间】:2015-03-17 15:13:37
【问题描述】:

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

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(remove) 但只删除了行号。我想删除 ListLinkedIds 中的每一行。

【问题讨论】:

标签: c# asp.net


【解决方案1】:

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

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

【讨论】:

  • @EhsanUllah,不太确定,第二种方法是选择必须删除的所有内容,然后将其删除,如果 DataTable 大小不够大,那么另存一份 DataTable可以创建或迭代数据表,找到行然后删除它
  • 我有所有必须从列表中删除的内容。
  • 我修改了代码。查看 SqlDataAdapter。该列是 LinkedTicketId
  • @Apollo, gvMain.DataSource = newDataTable;
【解决方案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);
            }
        }


    }

【讨论】:

    【解决方案3】:

    在填充数据表后尝试Delete

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

    【讨论】:

    • 它只适用于第一个,当它循环时它不适用于列表中的下一个项目。
    • 我得到已删除的行信息无法通过行访问。
    猜你喜欢
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 2018-06-04
    • 2018-01-11
    • 2018-03-03
    相关资源
    最近更新 更多