0

J'ai un formulaire avec un datagridview à ce sujet. Dans la première colonne de ce datagridview est un CheckBoxColumn. J'essaie d'ajouter une case à cocher à l'en-tête de la première colonne pour agir comme un tout sélectionner pour les cases à cocher ci-dessous. Je ne peux pas comprendre les exemples C# que j'ai trouvés en ligne et je n'ai trouvé aucun exemple de PowerShell. Quelqu'un peut-il me diriger dans la bonne direction de la façon de faire cela?Ajouter la case à cocher à la cellule d'en-tête dans Datagridview

[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() 

Répondre

0

Je ne pouvais pas trouver un moyen d'ajouter une case à cocher à la cellule d'en-tête de la colonne elle-même, donc je développe un travail autour. J'ai fini par en ajoutant une case à cocher au formulaire et stratégiquement placé là où la cellule d'en-tête serait. J'ai ensuite géré divers événements pour le faire fonctionner correctement avec le datagridview.

Notez que pour la case à cocher, j'ai utilisé l'événement Click au lieu de l'événement CheckStateChanged. C'est parce que je ne veux pas que toutes les cases à cocher des cellules soient décochées chaque fois que je clique sur une case à cocher, mais seulement la case spécifique que j'ai changée et la case à cocher de l'en-tête.

$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' 
     } 
    } 
}) 

Si vous voulez que votre case à cocher apparaître que lorsque le DataGrid remplit, regardez dans la propriété Visible. Il peut être réglé sur $true ou $false comme ceci: $datagrid1.Visible = $false