我有一个看起来像这样的数据库
正如您在Month
以外的所有列上方的图片上显示的内容TinyInt(1)
和Month
Varchar
现在我有代码
Dim con1 As MySqlConnection = New MySqlConnection("server=192.168.2.87;userid=root;password=admin1950;database=inventory")
Dim sql1 As MySqlCommand = New MySqlCommand("Select * from ri_closure", con1)
Dim ds1 As DataSet = New DataSet
Dim adapter1 As MySqlDataAdapter = New MySqlDataAdapter
con1.Open()
adapter1.SelectCommand = sql1
adapter1.Fill(ds1, "MyTable")
DataGridView2.DataSource = ds1.Tables(0)
con1.Close()
ds1.Tables(0).Columns(2).DataType = GetType(Boolean)
Me.DataGridView2.Columns(1).Frozen = True
Dim i As Integer
For i = 0 To DataGridView2.Columns.Count - 1
DataGridView2.Columns.Item(i).SortMode = DataGridViewColumnSortMode.Programmatic
Next
DataGridView2.Columns(0).Visible = False
DataGridView2.Columns(1).DefaultCellStyle.BackColor = Color.LightBlue
现在这就是它的样子
现在你看到了输出,我确定你不想那些红色的。刺激眼睛,这是我的代码
For Each rw As DataGridViewRow In DataGridView2.Rows
For ii As Integer = 2 To rw.Cells.Count - 1
If rw.Cells(ii).Value = False Then
rw.Cells(ii).Style.BackColor = Color.Red
ElseIf rw.Cells(ii).Value = True Then
rw.Cells(ii).Style.BackColor = Color.White
End If
Next
Next
现在这是我的问题,我希望有可能。我想做这样的事情而不是解开并将单元格变成红色我怎么能像这样制作未被攻击的单元格。
而不是空复选框,它看起来与上图相同。
另一个我希望那将生成填充复选框将替换uncheked值,因为我有代码检查那个。
我尝试了一些代码,这是输出
TYSM未来的帮助
答案 0 :(得分:1)
您可以通过处理DataGridViewCheckBox
DataGridView
事件来自定义Private Sub CellPainting(ByVal sender As Object, _
ByVal e As DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
If (e.ColumnIndex = 0 AndAlso e.RowIndex >= 0) Then
Dim value = DirectCast(e.FormattedValue, Nullable(Of Boolean))
e.Paint(e.CellBounds, DataGridViewPaintParts.All And _
Not (DataGridViewPaintParts.ContentForeground))
Dim state = IIf((value.HasValue And value.Value), _
VisualStyles.CheckBoxState.CheckedNormal, _
VisualStyles.CheckBoxState.MixedNormal)
Dim size = RadioButtonRenderer.GetGlyphSize(e.Graphics, state)
Dim location = New Point((e.CellBounds.Width - size.Width) / 2, _
(e.CellBounds.Height - size.Height) / 2)
location.Offset(e.CellBounds.Location)
CheckBoxRenderer.DrawCheckBox(e.Graphics, location, state)
e.Handled = True
End If
End Sub
列的绘画。然后,您可以使用CellPainting
绘制所需状态的复选框。您要为未选中状态的复选框显示的状态为CheckBoxRenderer
:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles MyBase.Load
Dim C1 = New DataGridViewCheckBoxColumn()
C1.DataPropertyName = "C1"
C1.HeaderText = "C1"
C1.TrueValue = 1
C1.FalseValue = 0
Me.DataGridView1.Columns.Add(C1)
Me.DataGridView1.Rows.Add(DirectCast(1, Object))
Me.DataGridView1.Rows.Add(DirectCast(0, Object))
Me.DataGridView1.AllowUserToAddRows = False
End Sub
要测试解决方案,您可以通过以下方式向网格添加列:
CheckBoxRenderer.DrawCheckBox
这将是结果:
要以红色绘制未选中(实际上是混合状态),请在调用If (state = VisualStyles.CheckBoxState.MixedNormal) Then
Dim rect = New Rectangle(location, size)
rect.Inflate(-2, -2)
e.Graphics.FillRectangle(Brushes.Red, rect)
End If
后使用此代码:
CoreData
答案 1 :(得分:0)
您可以使用DataGridView
' VirtualMode
,然后使用CellValueNeeded
事件来显示您自己的内容。
我建议你这样做,
DataGridView
' VirtualMode
属性设为true
DataGridView
与您的DataTable
迭代绑定到所有月份列后,将DataProperptyName
设置为空字符串(这对于触发事件非常重要)DataGridView
的{{3}}事件创建事件处理程序,在这种情况下,您将在事件参数中接收列索引和行索引。使用它来查找背后的实际值,然后返回绿色刻度图像(使用e.Value
)或根据值返回空白图像。