Powershell使用DataGridViewComboBoxColumn获取DataGridView以显示默认值

Powershell使用DataGridViewComboBoxColumn获取DataGridView以显示默认值,powershell,datagridview,dropdown,Powershell,Datagridview,Dropdown,我已经创建了这个示例代码 它应该生成服务列表并填充网格中的列表。 所有列都是下拉类型,此列的所有可能值都可供选择 我不能让每一行显示它的默认值 现在它显示一个没有选择值的下拉列表 $DataTable1 = New-Object System.Data.DataTable $ServiceList = Get-Service $grid_column_list = $ServiceList[0] | Get-Member |Where-Object {$_.MemberType -eq 'Pr

我已经创建了这个示例代码

它应该生成服务列表并填充网格中的列表。 所有列都是下拉类型,此列的所有可能值都可供选择

我不能让每一行显示它的默认值

现在它显示一个没有选择值的下拉列表

$DataTable1 = New-Object System.Data.DataTable

$ServiceList = Get-Service
$grid_column_list = $ServiceList[0] | Get-Member |Where-Object {$_.MemberType -eq 'Property'}

$ColumnDropdownDataTableList = 0..(($grid_column_list |measure).Count -1)
$DataGridViewComboBoxColumnList = 0..(($grid_column_list |measure).Count -1)

    ForEach ($grid_column in $grid_column_list)
    {
    [void] $DataTable1.Columns.Add(($grid_column.Name))
    
    $DataGridViewComboBoxColumnList[$grid_column_list.IndexOf($grid_column)] = New-Object System.Windows.Forms.DataGridViewComboBoxColumn
    $DataGridViewComboBoxColumnList[$grid_column_list.IndexOf($grid_column)].Name = $grid_column.Name
    $DataGridViewComboBoxColumnList[$grid_column_list.IndexOf($grid_column)].HeaderText = $grid_column.Name    
    
    $ColumnDropdownDataTableList[$grid_column_list.IndexOf($grid_column)] = New-Object System.Data.DataTable
    [void] $ColumnDropdownDataTableList[$grid_column_list.IndexOf($grid_column)].Columns.Add(($grid_column.Name))
    $DataSourceRows = ($ServiceList.($grid_column.Name) | Sort-Object -Unique)

        ForEach ($DataSourceRow in $DataSourceRows)
        {
        [void] $ColumnDropdownDataTableList[$grid_column_list.IndexOf($grid_column)].Rows.Add($DataSourceRow)
        }

    $DataGridViewComboBoxColumnList[$grid_column_list.IndexOf($grid_column)].DataSource = $ColumnDropdownDataTableList[$grid_column_list.IndexOf($grid_column)] #.($grid_column.Name)
    $DataGridViewComboBoxColumnList[$grid_column_list.IndexOf($grid_column)].ValueMember = $grid_column.Name
    $DataGridViewComboBoxColumnList[$grid_column_list.IndexOf($grid_column)].DisplayMember = $grid_column.Name
    $DataGridViewComboBoxColumnList[$grid_column_list.IndexOf($grid_column)].DataPropertyName = $Service.($grid_column.Name)
    
    
    }

    
    $ServiceList | ForEach-Object {
    [void] $DataTable1.Rows.Add($_.CanPauseAndContinue, $_.CanShutdown, $_.CanStop, $_.Container, $_.DependentServices, $_.DisplayName, $_.MachineName, $_.ServiceHandle, $_.ServiceName, $_.ServicesDependedOn, $_.ServiceType, $_.Site, $_.StartType, $_.Status)
    }


$Form = New-Object System.Windows.Forms.Form
$Form.Size = New-Object System.Drawing.Size(500,500)
$Form.StartPosition = "CenterScreen"

$Form.Add_Shown({
    $Form.Activate()
    })

# Datagridview
$DGV = New-Object System.Windows.Forms.DataGridView
$DGV.Anchor = [System.Windows.Forms.AnchorStyles]::Right -bor [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left -bor [System.Windows.Forms.AnchorStyles]::Top
$DGV.Location = New-Object System.Drawing.Size(0,0) 
$DGV.Size = New-Object System.Drawing.Size(480,400)
$DGV.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",10,0,3,1)
$DGV.BackgroundColor = "#ffffffff"
$DGV.BorderStyle = "Fixed3D"
$DGV.AlternatingRowsDefaultCellStyle.BackColor = "#ffe6e6e6"
$DGV.AutoSizeColumnsMode = [System.Windows.Forms.DataGridViewAutoSizeColumnsMode]::Fill
$DGV.AutoSizeRowsMode = [System.Windows.Forms.DataGridViewAutoSizeRowsMode]::AllCells
$DGV.SelectionMode = [System.Windows.Forms.DataGridViewSelectionMode]::FullRowSelect
$DGV.ClipboardCopyMode = "EnableWithoutHeaderText"
$DGV.AllowUserToOrderColumns = $True
$DGV.DataSource = $DataTable1
$DGV.AutoGenerateColumns = $False
$Form.Controls.Add($DGV)


ForEach ($DataGridViewComboBoxColumn in $DataGridViewComboBoxColumnList)
{
$DGV.Columns.AddRange($DataGridViewComboBoxColumn)
}


# Button to export data
$Button = New-Object System.Windows.Forms.Button
$Button.Anchor = [System.Windows.Forms.AnchorStyles]::Left -bor [System.Windows.Forms.AnchorStyles]::Bottom
$Button.Location = New-Object System.Drawing.Size(10,420) 
$Button.Text = "Export"
$Form.Controls.Add($Button)

# Button event handlers
$Button.Add_Click({
    $DataTable1 | Out-GridView # do what you want
    })

# Show form
[void] $Form.ShowDialog()

所以,您确实意识到组合框上的项目是重复的,组合框也是重复的,就像服务一样,对吗?嗨,JohnG,您能帮我将答案翻译成我的代码中必须执行的操作吗?我对PowerShell不太熟悉。我将删除我的重复链接。据我所知,您需要订阅grids
DefaultValuesNeed
事件。类似于…
$DGV.Add_defaultvaluesneed({newrowvaluesneed})
然后创建函数
newrowvaluesneed
,您可以在其中设置默认值。我不确定您如何知道代码所做的事情会给任何特定的“默认”值,所以我显然遗漏了一些东西。