Datagridview 不更改单元格中的图像
Datagridview not changing image in cell
我正在 Windows 表单中使用 DataGridViewObject,使用 VB.NET。我有三列需要显示图标。但是,根据行中的一些信息,该图标将显示或不显示。我的问题是当我改变它的价值时图像不会改变。基本上,我这样定义我的列:
Dim column1 As DataGridViewImageColumn = New DataGridViewImageColumn()
column1.Image = My.Resources.image1
column1.Width = 30
dw.Columns.Add(column1)
Dim column2 As DataGridViewImageColumn = New DataGridViewImageColumn()
column2.Image = My.Resources.image2
column2.Width = 30
dw.Columns.Add(column2)
Dim column3 As DataGridViewImageColumn = New DataGridViewImageColumn()
column3.Image = My.Resources.image3
column3.Width = 30
dw.Columns.Add(column3)
填满数据后,我循环遍历行,如果我不想显示该行中的图像,我会这样做:
Dim cell1 As DataGridViewImageCell = row.Cells(9)
Dim cell2 As DataGridViewImageCell = row.Cells(10)
Dim cell3 As DataGridViewImageCell = row.Cells(11)
cell1.Value = Nothing
cell2.Value = Nothing
cell3.Value = Nothing
但是,我的图像保留了下来。任何人都知道我错过了什么?
您正在使用一些未绑定的 DataGridViewImageColumn
并且如文档中所述,Image
属性 指定当列不是数据时显示在没有值的单元格中的图像-绑定。
因此,通过将单元格值设置为空,您将强制单元格显示 Image
属性。
解决问题:
- 为您的专栏设置
column.DefaultCellStyle.NullValue = Nothing
- 不要设置
Image
属性。
- 每次要显示图像时,将图像分配给
Value
属性 个单元格。
您可以在循环中或使用 CellFormatting
事件手动设置 Cell 的值。例如:
Private Sub DataGridView1_CellFormatting(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) _
Handles DataGridView1.CellFormatting
If (e.RowIndex >= 0 AndAlso e.ColumnIndex = 2) Then
If (e.RowIndex Mod 2 = 0) Then 'Use any criteria which you need, it's a test
e.Value = My.Resources.Image1
Else
e.Value = DBNull.Value
e.CellStyle.NullValue = Nothing
End If
End If
' Do the same for other image columns.
End Sub
我正在 Windows 表单中使用 DataGridViewObject,使用 VB.NET。我有三列需要显示图标。但是,根据行中的一些信息,该图标将显示或不显示。我的问题是当我改变它的价值时图像不会改变。基本上,我这样定义我的列:
Dim column1 As DataGridViewImageColumn = New DataGridViewImageColumn()
column1.Image = My.Resources.image1
column1.Width = 30
dw.Columns.Add(column1)
Dim column2 As DataGridViewImageColumn = New DataGridViewImageColumn()
column2.Image = My.Resources.image2
column2.Width = 30
dw.Columns.Add(column2)
Dim column3 As DataGridViewImageColumn = New DataGridViewImageColumn()
column3.Image = My.Resources.image3
column3.Width = 30
dw.Columns.Add(column3)
填满数据后,我循环遍历行,如果我不想显示该行中的图像,我会这样做:
Dim cell1 As DataGridViewImageCell = row.Cells(9)
Dim cell2 As DataGridViewImageCell = row.Cells(10)
Dim cell3 As DataGridViewImageCell = row.Cells(11)
cell1.Value = Nothing
cell2.Value = Nothing
cell3.Value = Nothing
但是,我的图像保留了下来。任何人都知道我错过了什么?
您正在使用一些未绑定的 DataGridViewImageColumn
并且如文档中所述,Image
属性 指定当列不是数据时显示在没有值的单元格中的图像-绑定。
因此,通过将单元格值设置为空,您将强制单元格显示 Image
属性。
解决问题:
- 为您的专栏设置
column.DefaultCellStyle.NullValue = Nothing
- 不要设置
Image
属性。 - 每次要显示图像时,将图像分配给
Value
属性 个单元格。
您可以在循环中或使用 CellFormatting
事件手动设置 Cell 的值。例如:
Private Sub DataGridView1_CellFormatting(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) _
Handles DataGridView1.CellFormatting
If (e.RowIndex >= 0 AndAlso e.ColumnIndex = 2) Then
If (e.RowIndex Mod 2 = 0) Then 'Use any criteria which you need, it's a test
e.Value = My.Resources.Image1
Else
e.Value = DBNull.Value
e.CellStyle.NullValue = Nothing
End If
End If
' Do the same for other image columns.
End Sub