【问题标题】:DataGridViewImageColumn doesn't change valueDataGridViewImageColumn 不会改变值
【发布时间】:2019-10-02 10:51:26
【问题描述】:

当另一个单元格的值为 OK 或 NO 时,我正在尝试更改 DataGridViewImageColumn 中的一个单元格的图像。 我已经使用此代码创建了列

Dim NewImageProd As New DataGridViewImageColumn
NewImageProd.Image = My.Resources.Smile1
NewImageProd.Name = "IMAGE"
NewImageProd.ImageLayout = DataGridViewImageCellLayout.Zoom
NewImageProd.DisplayIndex = 0
NewImageProd.Width = 70
DGDati.Columns.Add(NewImageProd)

后来我用这段代码完成了检查

For Idx = 0 To DGDati.RowCount - 1
    Select Case DGDati("OTHERVALUE", Idx).Value.ToString
        Case "OK"
            DGDati.Rows(Idx).Cells("IMAGE").Value = My.Resources.Smile2
        Case "NO"
            DGDati.Rows(Idx).Cells("IMAGE").Value = My.Resources.Smile3
    End Select
Next
Call DGDati.RefreshEdit()

但是什么也没发生。 我做错了什么?

【问题讨论】:

  • 在比较之前尝试修剪字符串。
  • @preciousbetine 进入Case,但没有设置新值:/
  • 永远不要像那样重复使用资源中的图像。 Resources 是工厂而不是集合。这意味着它每次都在创建一个新的、唯一的对象,这太过分了,并导致您的应用程序泄漏。将它们存储在一个 n 数组中并从那里加载

标签: vb.net datagridviewimagecolumn


【解决方案1】:

使用DataGridView.CellFormatting 事件,当单元格的内容需要格式化以供显示时发生。使用此事件无需刷新DataGridView 或数据。

Private Sub DGDati_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DGDati.CellFormatting

    If e.ColumnIndex = -1 Or e.RowIndex = -1 Then Exit Sub

    With Me.DGDati
        If .Columns(e.ColumnIndex).Name = "IMAGE" Then
            If .Rows(e.RowIndex).Cells("OTHER_VALUE").Value = "OK" Then
                e.Value = My.Resources.Smile2
            ElseIf .Rows(e.RowIndex).Cells("OTHER_VALUE").Value = "NO"
                e.Value = My.Resources.Smile3
            Else
                e.Value = My.Resources.Smile1
            End If
        End If
    End With

End Sub

还要遵循 cmets 中的建议,不要像这样重复使用来自 Resources 的图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    • 2023-04-10
    • 1970-01-01
    • 2023-03-21
    • 2019-06-04
    • 1970-01-01
    相关资源
    最近更新 更多