0

我有一个格式为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() 

回答

0

我找不到添加复选框到列标题单元格本身的方法,所以我开发了一个解决方法。我结束了添加一个复选框的形式并战略性地将它放在标题单元格的位置。然后我处理了各种事件,使其与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' 
     } 
    } 
}) 

如果你希望你的复选框只出现在DataGrid填充,看看到Visible财产。它可以设置为$true$false像这样:$datagrid1.Visible = $false

相关问题