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

相關問題