簡體   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