【发布时间】:2013-10-25 18:42:05
【问题描述】:
我的表单上有一个 datagridview,我正在为自定义名称样式和过滤器图像渲染它的标题。
我想要的是:
在第一个位置而不是第零个索引处添加带有 headercheckbox 的复选框列。我想要它在 -1。
在特定列添加一些复选框。
我能够将它们添加到想要的位置,但它没有刷新界面,我无法让它们选中/取消选中。
Dim indx As Int16 = -1
Private Sub DataGridView1_CellPainting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
tbIndex = 0 'mainTab.SelectedItem.Name.Substring(6)
If e.ColumnIndex >= 0 AndAlso e.RowIndex = -1 Then
If dic.ContainsKey(tbIndex) Then
indx = dic.Item(tbIndex)
Else
indx = -1
End If
e.PaintBackground(e.ClipBounds, False)
Dim pt As Point = e.CellBounds.Location
Dim offset As Integer = (e.CellBounds.Width - 25)
pt.X += offset
pt.Y = 5
If e.ColumnIndex = indx Then
e.Graphics.DrawImage(My.Resources.SortDSC, pt.X, pt.Y, 20, 20)
Else
e.Graphics.DrawImage(My.Resources.SortASC, pt.X, pt.Y, 20, 20)
End If
Dim drawFormat As System.Drawing.StringFormat = New System.Drawing.StringFormat()
drawFormat.FormatFlags = StringFormatFlags.NoFontFallback
e.Graphics.DrawString(dgv(tbIndex).Columns(e.ColumnIndex).HeaderText, New Font("Georgia", 10), Brushes.DodgerBlue, pt.X - offset, pt.Y + 15, drawFormat)
e.Handled = True
e.Handled = True
End If
End Sub
Private Sub DataGridView1_ColumnHeaderMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.ColumnHeaderMouseClick
If indx = e.ColumnIndex.ToString Then
indx = -1
Else
indx = e.ColumnIndex.ToString
End If
If Not dic.ContainsKey(tbIndex) Then
dic.Add(tbIndex, indx)
Else
dic.Remove(tbIndex)
dic.Add(tbIndex, indx)
End If
End Sub
我想在运行时添加它们。
【问题讨论】:
-
这是winform吗?你是如何将它们添加到想要的位置的?一些代码对你的困境很有帮助
-
请查看我在问题中添加的代码。
-
感谢您的帮助。我使用了这个,但我无法将它创建一个新列,我想将复选框放在第一列。
标签: vb.net datagridview checkbox