DataView RowFilter删除整行

时间:2014-01-24 13:33:57

标签: vb.net datagridview datatable dataview rowfilter

我有一个包含少量列的DataTable。最后一列是布尔类型,它表示行是否有效(应该/不应该在DataGridView中显示)。接下来,我有一个DataView,它被设置为DataGridView的DataSoure:

 MyDataView = New DataView(MyDataTable, "Valid = True", Nothing, DataViewRowState.CurrentRows)
 MyDataGridView.DataSource = MyDataView 

我在一秒间隔刷新DataTable,每次我必须决定行是否有效。现在它有效。如果Valid属性设置为false,则行将从DGW中消失。

我的桌子有6行(总是有)。我想要实现的是,如果有效是假的,我不想从DGV中消失整行。我只想从单元格中删除值,使其看起来是空的。

我的观点是,如果表中的行为空,则DGF包含所有行事件(您可以在DGW中看到行但是为空)。每行都有不同的背景颜色(偶数行是白色,奇数行是灰色)。

如果在表格中添加了新行,我不想在DGW中添加新行,我想填写emtpy行。如果从表中删除了某些行,我不想将其从DGW中删除,我只想在此行中清除单元格...

有没有办法如何使用DataView实现这一点,或者我必须使用我的代码手动检查它(并在DataView中禁用RowFilter)?感谢

1 个答案:

答案 0 :(得分:0)

过滤器不适用于此。您需要在网格中处理它。这是一种可以帮助你的方法

Private Sub grid_CellPainting(sender As Object, e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles grid.CellPainting

    If e.RowIndex > -1 AndAlso e.ColumnIndex > -1 Then
        Dim oVw As DataRowView
        oVw = TryCast(grid.Rows(e.RowIndex).DataBoundItem, DataRowView)
        If Not oVw Is Nothing AndAlso CBool(oVw.Item("Valid")) Then
            e.Handled = True
            e.PaintBackground(e.ClipBounds, True)
        End If
    End If
End Sub