2012-12-17 164 views
0

的問題是,當你打,即使列是從視圖中刪除刪除,仍然存在,如果你對Rows.Count檢查。刪除行(物理)從DataGridView

同樣的情況發生在DataTables'Delete(DataRow)',我跳轉使用刪除/ RemoveAt。

所以後,我從DataGridView刪除行,如果我走了DataSourceDataTable,並嘗試將其導出(以CSV在這種情況下)拋出一個信息,即它無法獲得刪除的行信息(意譯 - 對不起調試器拋出本地語言)。

我能想到的幾個棘手的方式與DataGridViewRowCollectionDataGridViewSelectedRowCollectionDataTables身邊打球,但我真正需要的東西更紮實和容易。

+0

你能分享你的代碼嗎? – spajce

回答

0

好的,解決方案是在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); 
} 
0

我有點晚了這裏的比賽,但是這是非常容易的。

首先,使用WithEvents關鍵字創建數據表:

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 

希望這有助於。