将复选框添加到 Datagridview 中的 Header 个单元格
Add Checkbox to Header Cell in Datagridview
我有一个带有 datagridview
的表格。在这个 datagridview
的第一列是一个 CheckBoxColumn
。我正在尝试向第一列的 header 添加一个复选框,以充当其下方复选框的 select 。我无法理解我在网上找到的 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()
我找不到向 header 列单元格本身添加复选框的方法,因此我开发了一个解决方法。我最终 在表单 中添加了一个复选框,并巧妙地将其放置在 header 单元格所在的位置。然后我处理了各种事件以使其与 datagridview
.
一起正常工作
请注意,对于复选框,我使用了 Click
事件而不是 CheckStateChanged
事件。这是因为我不希望每次单击复选框时取消选中所有单元格复选框,但只希望我更改的特定框和 header 复选框。
$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
我有一个带有 datagridview
的表格。在这个 datagridview
的第一列是一个 CheckBoxColumn
。我正在尝试向第一列的 header 添加一个复选框,以充当其下方复选框的 select 。我无法理解我在网上找到的 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()
我找不到向 header 列单元格本身添加复选框的方法,因此我开发了一个解决方法。我最终 在表单 中添加了一个复选框,并巧妙地将其放置在 header 单元格所在的位置。然后我处理了各种事件以使其与 datagridview
.
请注意,对于复选框,我使用了 Click
事件而不是 CheckStateChanged
事件。这是因为我不希望每次单击复选框时取消选中所有单元格复选框,但只希望我更改的特定框和 header 复选框。
$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