[英]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.