0

问题是,当您点击删除时,即使这些行已从视图中删除,如果您选中Rows.Count.

DataTables' '也会发生同样的情况Delete(DataRow),这是我使用 Remove/RemoveAt 跳过的。

因此,在我从 a 中删除行之后DataGridView,如果我使用DataSourceasDataTable并尝试将其导出(在这种情况下为 csv),则会抛出一条消息,指出它无法获取已删除行的信息(释义 - 抱歉,调试器抛出了母语)。

我可以想出一些棘手的方法来处理DataGridViewRowCollection,DataGridViewSelectedRowCollectionDataTables,但我真的需要一些更可靠、更简单的方法。

4

2 回答 2

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);
}
于 2012-12-17T10:38:00.117 回答
0

我在这里玩游戏有点晚了,但这非常容易。

首先,使用 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

希望有帮助。

于 2014-12-24T22:14:14.437 回答