VB.net DataGridview:使用图像表示布尔列

时间:2015-07-10 09:16:17

标签: vb.net image datagridview

我有一个DataGridView ./manage.py makemigrations <your_app_name>,显示基础DataView dgv的内容,我用它来过滤行条目。 (dv

DataView中的两列是布尔类型,并显示为VB的默认复选框格式,但是,我希望它们分别显示为红色和绿色的正方形(或矩形),分别为False和True。 / p>

我知道对于带有dgv.DataSource = dv类型列的DataGridView,我可以简单地生成一个图像并用类似的东西显示它:

DataGridViewImageColumn

但我不知道如何使用源自链接DataView的列做类似的事情;当列甚至不是图像列时,更不用说了。

我考虑过更改底层DataView以包含图像,但后来我不知道如何根据该列的值进行过滤。因此,我希望有一些方法可以在不改变底层结构的情况下简单地改变可视化。

2 个答案:

答案 0 :(得分:1)

使用Cell Formatting事件处理程序

Private Sub dgv_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles dgv.CellFormatting
    If e.RowIndex < 0 OrElse e.ColumnIndex < 0 Then Exit Sub

    'You can check that column is right by ColumnIndex
    'I prefer using a name of the DataGridViewColumn, 
    'because indexes can be changed while developing
    If Me.dgv.Columns(e.ColumnIndex).Name.Equals("PredefinedColumnName") = True Then
        If CBool(e.Value) = True Then
            e.Value = My.Resources.GreenSquare 'image saved in the resources
        Else
            e.Value = My.Resources.RedSquare
        End If
    End If
End Sub

答案 1 :(得分:1)

对于简单的颜色填充操作,不需要使用位图。只需订阅DatagridView上的CellPainting事件。

Private Sub dgv1_CellPainting(sender As Object, e As DataGridViewCellPaintingEventArgs) Handles dgv1.CellPainting
   Const checkboxColumnIndex As Int32 = 0 ' set this to the needed column index
   If e.ColumnIndex = checkboxColumnIndex AndAlso e.RowIndex >= 0 Then
      Dim br As Brush
         If CBool(e.Value) Then
            br = Brushes.GreenYellow
         Else
            br = Brushes.Red
         End If
         e.Graphics.FillRectangle(br, e.CellBounds)
         e.Paint(e.ClipBounds, DataGridViewPaintParts.Border)
         e.Handled = True
      End If
   End Sub

有关详细信息,请参阅:Customizing the Windows Forms DataGridView Control