[英]Deleting Rows (physically) from DataGridView
問題是,即使您從視圖中刪除了行,當您單擊Delete時,如果您選中Rows.Count
,仍然會保留。
在具有“ Delete(DataRow)
”的DataTables
上也發生了同樣的情況,這是我使用Remove / RemoveAt跳過的。
因此,在我從DataGridView
刪除行之后,如果我將DataSource
用作DataTable
並嘗試導出(在本例中為csv),則會拋出一條消息,提示它無法獲取已刪除行的信息(解釋-抱歉,調試器將本機拋出語言)。
我可以想到一些棘手的方法來使用DataGridViewRowCollection
, DataGridViewSelectedRowCollection
和DataTables
,但是我確實需要更簡單易用的東西。
好的,解決方案在DataRowState上。 為了擺脫所有手動刪除的行,您必須執行以下操作:
DataTable t = (DataTable)dataGridView1.DataSource;
for (int i = t.Rows.Count - 1; i >= 0; i--)
{
if (t.Rows[i].RowState == DataRowState.Deleted)
t.Rows.RemoveAt(i);
}
我在這里玩游戲有點晚,但這非常容易。
首先,使用WithEvents關鍵字創建DataTable:
Dim WithEvents theDataTable As New DataTable
或者,您可以使用AddHandler方法:
AddHandler theDataTable.RowDeleted, AddressOf theDataTable_RowDeleted
然后處理RowDeleted事件:
Private Sub theDataTable_RowDeleted(sender As Object, e As DataRowChangeEventArgs) Handles theDataTable.RowDeleted
theDataTable.Rows.Remove(e.Row)
End Sub
希望能有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.