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
,您可以在其中设置默认值。我不确定您如何知道代码所做的事情会给任何特定的“默认”值,所以我显然遗漏了一些东西。