我有一个DataGridView ./manage.py makemigrations <your_app_name>
,显示基础DataView dgv
的内容,我用它来过滤行条目。 (dv
)
DataView中的两列是布尔类型,并显示为VB的默认复选框格式,但是,我希望它们分别显示为红色和绿色的正方形(或矩形),分别为False和True。 / p>
我知道对于带有dgv.DataSource = dv
类型列的DataGridView,我可以简单地生成一个图像并用类似的东西显示它:
DataGridViewImageColumn
但我不知道如何使用源自链接DataView的列做类似的事情;当列甚至不是图像列时,更不用说了。
我考虑过更改底层DataView以包含图像,但后来我不知道如何根据该列的值进行过滤。因此,我希望有一些方法可以在不改变底层结构的情况下简单地改变可视化。
答案 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