简体   繁体   中英

Checkbox datagridview

I have a datagridview on my form and with this I am rendering its headers for the custom name style and the filter image.

What I want is :

  1. To add the checkbox column with headercheckbox at the very first position not the zeroth index. I want it at -1.

  2. To add some checkboxes at the particular columns.

I was able to add them at the wanted positions but it was not refreshing the interface and I was unable to get them check/unchecked.

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

I want to add them at runtime.

Please correct me if I'm wrong, but I'm seeing two different questions:

  1. Create (programmatically) a column with checkboxes. The easiest way to achieve this is to create a column of type DataGridViewCheckBoxColumn().

  2. Move this column before the beginning of the rows For this problem, I'd advise looking into WPF instead of WinForms. WPF offers much more functionality to designing specific layout and interfaces. Here's an excellent example by MSDN to do exactly this: http://social.msdn.microsoft.com/Forums/en-US/a87fc1cb-4d2c-4252-a628-910c02b03adb/wpf-datagrid-with-multiple-row-selectioncheckbox-column-template

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM