Добавить флажок в ячейку заголовка в Datagridview

У меня есть форма с datagridview в теме. В первом столбце этого datagridview это CheckBoxColumn, Я пытаюсь добавить флажок в заголовок первого столбца, чтобы действовать как выбор всех для флажков под ним. Я не могу понять примеры C#, которые я нашел в Интернете, и я не нашел ни одного примера PowerShell. Может ли кто-нибудь указать мне правильное направление, как это сделать?

[void] [System.Reflection.Assembly]::LoadWithPartialName(“System.Windows.Forms”)
[void] [System.Reflection.Assembly]::LoadWithPartialName(“System.Drawing”)
$form = New-Object System.Windows.Forms.Form
$form.Size = New-Object System.Drawing.Size(400, 400)
$form.KeyPreview = $true

$CheckBoxColumn1 = New-object System.Windows.Forms.DataGridViewCheckBoxColumn
$CheckBoxColumn1.Width = 30
$CheckBoxColumn1.ReadOnly = $false

$DataGrid1 = New-Object System.Windows.Forms.DataGridView
$DataGrid1.Dock = "Fill"
$DataGrid1.BorderStyle = 'FixedSingle'
$DataGrid1.AlternatingRowsDefaultCellStyle.BackColor = 'LightGray'
$DataGrid1.AllowUserToAddRows = $false
$DataGrid1.RowHeadersVisible = $false
$DataGrid1.BackgroundColor = "White"
$DataGrid1.Columns.Add($CheckBoxColumn1) | Out-Null
$DataGrid1.ColumnCount = 3
$DataGrid1.Columns[1].name = 'col1'
$DataGrid1.Columns[2].name = 'col2'
$DataGrid1.Rows.add($false,'one','two')
$DataGrid1.Rows.add($false,'three','four')

##Add checkbox to header row column 0

$form.Controls.Add($DataGrid1)
$form.ShowDialog()

1 ответ

Решение

Я не смог найти способ добавить флажок в саму ячейку заголовка столбца, поэтому я разработал обходной путь. В итоге я добавил флажок в форму и стратегически разместил его там, где должна быть ячейка заголовка. Затем я обработал различные события, чтобы он правильно работал с datagridview,

Обратите внимание, что для флажка я использовал Click событие вместо CheckStateChanged событие. Это потому, что я не хочу, чтобы все флажки ячейки снимались каждый раз, когда я нажимаю на флажок, а только на конкретное поле, которое я изменил, и флажок заголовка.

$checkbox1 = New-Object System.Windows.Forms.CheckBox
$checkbox1.Location = New-Object System.Drawing.Size(10,5)
$checkbox1.Size = New-Object System.Drawing.Size(13,13)
$checkbox1.Visible = $true
$checkbox1.add_Click({
    if($checkbox1.Checked){
        for($i = 0; $i -lt $datagrid1.RowCount;$i++){
            $datagrid1.Rows[$i].Cells[0].Value = $true
        }
    }
    else{
        for($i = 0; $i -lt $datagrid1.RowCount;$i++){
            $datagrid1.Rows[$i].Cells[0].Value = $false
        }
    }
})
$form.Controls.Add($checkbox1)

#Handle Events:
$DataGrid1.add_CellContentClick({
    $datagrid1.EndEdit() #otherwise the cell value won't have changed yet
    [System.Windows.Forms.DataGridViewCellEventArgs]$e = $args[1]
    if($e.columnIndex -eq 0){
        if($datagrid1.rows[$e.RowIndex].Cells[$e.ColumnIndex].value -eq $false){
            $checkbox1.CheckState = 'unchecked'
        }
    }
})

Если вы хотите, чтобы ваш флажок появлялся только при заполнении таблицы данных, посмотрите на Visible имущество. Может быть установлено $true или же $false как это: $datagrid1.Visible = $false

Другие вопросы по тегам