【问题标题】:Checkbox datagridview复选框数据网格视图
【发布时间】:2013-10-25 18:42:05
【问题描述】:

我的表单上有一个 datagridview,我正在为自定义名称样式和过滤器图像渲染它的标题。

我想要的是:

  1. 在第一个位置而不是第零个索引处添加带有 headercheckbox 的复选框列。我想要它在 -1。

  2. 在特定列添加一些复选框。

我能够将它们添加到想要的位置,但它没有刷新界面,我无法让它们选中/取消选中。

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


【解决方案1】:

如果我错了,请纠正我,但我看到了两个不同的问题:

  1. (以编程方式)创建带有复选框的列。 实现此目的的最简单方法是创建 DataGridViewCheckBoxColumn() 类型的列。

  2. 将此列移到行首之前 对于这个问题,我建议查看 WPF 而不是 WinForms。 WPF 为设计特定布局和界面提供了更多功能。这是 MSDN 提供的一个很好的例子:http://social.msdn.microsoft.com/Forums/en-US/a87fc1cb-4d2c-4252-a628-910c02b03adb/wpf-datagrid-with-multiple-row-selectioncheckbox-column-template

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 2015-01-22
    • 2011-08-06
    • 1970-01-01
    相关资源
    最近更新 更多