问题在于,即使从视图中删除行,当您点击删除时,如果您选中Rows.Count
,仍会保留。
DataTables
带有'Delete(DataRow)
'也是如此,我使用Remove / RemoveAt跳过了。
因此,在我从DataGridView
删除行后,如果我将DataSource
作为DataTable
并尝试导出它(在这种情况下为csv)会抛出一条消息,表明它可以'获取已删除行的信息(释义 - 抱歉调试器使用本地语言)。
我可以想到使用DataGridViewRowCollection
,DataGridViewSelectedRowCollection
和DataTables
的一些棘手方法,但我真的需要一些更加扎实和简单的东西。
答案 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
希望有所帮助。