【问题标题】:Add Checkbox to Header Cell in Datagridview将复选框添加到 Datagridview 中的标题单元格
【发布时间】:2017-10-04 21:12:05
【问题描述】:

我有一个带有datagridview 的表格。在此datagridview 的第一列中是CheckBoxColumn。我正在尝试在第一列的 header 中添加一个复选框,以作为其下方复选框的全选。我无法理解我在网上找到的 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()

【问题讨论】:

    标签: winforms powershell checkbox datagridview datagridcolumnheader


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-06
      相关资源
      最近更新 更多