[英]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中删除记录的深入见解:
它看起来像这样:
DataRow[] drr = dt.Select("Student=' " + id + " ' ");
foreach (var row in drr)
row.Delete();
不要忘记,如果要更新数据库,则需要调用Update命令。 有关更多信息,请参阅此链接:
我认为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.