从DataGridView中删除(物理)行

时间:2012-12-17 09:50:52

标签: c# datagridview delete-row

问题在于,即使从视图中删除行,当您点击删除时,如果您选中Rows.Count,仍会保留。

DataTables带有'Delete(DataRow)'也是如此,我使用Remove / RemoveAt跳过了。

因此,在我从DataGridView删除行后,如果我将DataSource作为DataTable并尝试导出它(在这种情况下为csv)会抛出一条消息,表明它可以'获取已删除行的信息(释义 - 抱歉调试器使用本地语言)。

我可以想到使用DataGridViewRowCollectionDataGridViewSelectedRowCollectionDataTables的一些棘手方法,但我真的需要一些更加扎实和简单的东西。

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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

希望有所帮助。