我有一个包含少量列的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)?感谢
答案 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