繁体   English   中英

从C#中删除数据表中的行

[英]Deleting row from datatable in C#

我在从数据表中删除行时遇到问题。 在我的程序中,我使用sql查询将数据库中的信息读入数据表。 我使用oledb连接和代码dt.Load(command.ExecuteReader()); 去做这个。 稍后,我想删除与id字符串匹配的行。 我试过以下代码购买无法让它工作:

            DataRow[] drr = dt.Select("Student=' " + id + " ' "); 
            for (int i = 0; i < drr.Length; i++)
                dt.Rows.Remove(drr[i]);
            dt.AcceptChanges();

任何人都可以用一个例子建议另一种方式吗?

尝试使用Delete方法:

    DataRow[] drr = dt.Select("Student=' " + id + " ' "); 
    for (int i = 0; i < drr.Length; i++)
        drr[i].Delete();
    dt.AcceptChanges();

有几种不同的方法可以做到这一点。 但您可以使用以下方法:

List<DataRow> RowsToDelete = new List<DataRow>();

for (int i = 0; i < drr.Length; i++) 
{     
   if(condition to delete the row) 
   {  
       RowsToDelete.Add(drr[i]);     
   } 
}

foreach(var dr in RowsToDelete) 
{     
   drr.Rows.Remove(dr); 
} 

这个问题将为您提供有关如何从DataTable中删除记录的深入见解:

DataTable,如何有条件地删除行

它看起来像这样:

DataRow[] drr = dt.Select("Student=' " + id + " ' "); 
foreach (var row in drr)
   row.Delete();

不要忘记,如果要更新数据库,则需要调用Update命令。 有关更多信息,请参阅此链接:

http://www.codeguru.com/forum/showthread.php?t=471027

我认为OPs代码不起作用的原因是因为一旦你调用Remove你正在改变drr的长度。 当您调用Delete时,实际上不会删除该行,直到调用AcceptChanges。 这就是为什么如果你想使用Remove你需要一个单独的循环。

视情况或偏好而定......

string colName = "colName";
string comparisonValue = (whatever it is).ToString();
string strFilter = (dtbl.Columns[colName].DataType == typeof(string)) ? "[" + colName + "]='" + comparisonValue + "'" : "[" + colName + "]=" + comparisonValue;
string strSort = "";

DataRow[] drows = dtbl.Select(strFilter, strSort, DataViewRowState.CurrentRows);

以上用于下两个例子

foreach(DataRow drow in drows)
{
   drow.Delete();//Mark a row for deletion.
}
dtbl.AcceptChanges();

要么

foreach(DataRow drow in drows)
{
   dtbl.Rows[dtbl.Rows.IndexOf(drow)].Delete();//Mark a row for deletion.
}
dtbl.AcceptChanges();

要么

List<DataRow> listRowsToDelete = new List<DataRow>();

foreach(DataRow drow in dtbl.Rows)
{
   if(condition to delete)
   {
      listRowsToDelete.Add(drow);
   }
}

foreach(DataRow drowToDelete in listRowsToDelete)
{
   dtbl.Rows.Remove(drowToDelete);// Calling Remove is the same as calling Delete and then calling AcceptChanges
}

请注意,如果调用Delete(),则应调用AcceptChanges(),但如果调用Remove(),则不需要AcceptChanges()。

此外,这里有关于行过滤器语法的良好链接。

我使用Remove方法看到了许多答案,其他人使用Delete方法。

删除(根据文档)将立即从(本地)表中删除记录,并在更新时,不会删除丢失的记录。

相比之下删除会将RowState更改为Deleted,并将更新Update上的服务器表。 同样,在更新服务器表之前调用AcceptChanges方法会将所有RowState重置为Unchanged,并且任何内容都不会流向服务器。 (在多次击中之后仍然用拇指护理)。

如果要从DataTable中删除整行

试试这个

DataTable dt = new DataTable();  //User DataTable
DataRow[] rows;
rows = dt.Select("Student=' " + id + " ' ");
foreach (DataRow row in rows)
     dt.Rows.Remove(row);

对于这种情况,Advance for loop更好

public void deleteRow(DataRow selectedRow)
        {
            foreach (DataRow  in StudentTable.Rows)
            {
                if (SR[TableColumn.StudentID.ToString()].ToString() == StudentIndex)
                    SR.Delete();
            }

            StudentTable.AcceptChanges();
        }

一个简单的例子: http//www.dotnetspark.com/tutorial/13-42-delete-row-from-datatable.aspx

这对你有用吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM