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 属性。

解决问题:

  1. 为您的专栏设置 column.DefaultCellStyle.NullValue = Nothing
  2. 不要设置 Image 属性。
  3. 每次要显示图像时,将图像分配给 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