Vb.net 复选框datagridview

Vb.net 复选框datagridview,vb.net,datagridview,checkbox,Vb.net,Datagridview,Checkbox,我的表单上有一个datagridview,通过它,我呈现了自定义名称样式和过滤器图像的标题 我想要的是: 要添加复选框列,headercheckbox位于第一个位置,而不是第零个索引。我要零下一点 在特定列中添加一些复选框 我能够将它们添加到想要的位置,但它没有刷新界面,我无法让它们检查/取消检查 Dim indx As Int16 = -1 Private Sub DataGridView1_CellPainting(ByVal sender As Object, ByVal e As Sy

我的表单上有一个datagridview,通过它,我呈现了自定义名称样式和过滤器图像的标题

我想要的是:

  • 要添加复选框列,headercheckbox位于第一个位置,而不是第零个索引。我要零下一点

  • 在特定列中添加一些复选框

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

    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
    

    我想在运行时添加它们。

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

  • (以编程方式)创建带有复选框的列。 实现这一点的最简单方法是创建DataGridViewCheckBoxColumn()类型的列

  • 将此列移到行的开头之前 对于这个问题,我建议研究WPF而不是WinForms。WPF为设计特定的布局和接口提供了更多的功能。下面是MSDN的一个很好的例子,可以做到这一点:


  • 这是winform吗?你是如何将他们添加到通缉职位的?一些代码可能会对您的困境有帮助。请查看我随问题添加的代码。这可能会有所帮助。谢谢您的帮助。我用了这个,但我不能把它创建一个新的列,我想把复选框在第一列。