You need to enable JavaScript to run this app. PowerShell中DataGridViewComboBoxColumn列如何显示行默认值
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell中DataGridViewComboBoxColumn列如何显示行默认值

问题修复方案

核心错误为DataGridViewComboBoxColumn的DataPropertyName属性赋值错误,导致下拉列无法与后台数据表字段绑定,无法自动匹配默认值,以下是修正后的完整可运行代码:

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

$DataTable1 = New-Object System.Data.DataTable

$ServiceList = Get-Service
# 过滤非值类型/字符串类型属性,避免下拉框显示异常
$grid_column_list = $ServiceList[0] | Get-Member -MemberType Property | Where-Object {
    $_.Definition -match '^string|^bool|^enum|^int'
}

$ColumnDropdownDataTableList = [array]::CreateInstance([System.Data.DataTable], $grid_column_list.Count)
$DataGridViewComboBoxColumnList = [array]::CreateInstance([System.Windows.Forms.DataGridViewComboBoxColumn], $grid_column_list.Count)

ForEach ($grid_column in $grid_column_list) {
    $colIndex = $grid_column_list.IndexOf($grid_column)
    [void] $DataTable1.Columns.Add($grid_column.Name)
    
    # 初始化下拉列
    $DataGridViewComboBoxColumnList[$colIndex] = New-Object System.Windows.Forms.DataGridViewComboBoxColumn
    $DataGridViewComboBoxColumnList[$colIndex].Name = $grid_column.Name
    $DataGridViewComboBoxColumnList[$colIndex].HeaderText = $grid_column.Name    
    
    # 初始化下拉选项数据表
    $ColumnDropdownDataTableList[$colIndex] = New-Object System.Data.DataTable
    [void] $ColumnDropdownDataTableList[$colIndex].Columns.Add($grid_column.Name)
    $DataSourceRows = ($ServiceList.$($grid_column.Name) | Sort-Object -Unique)

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

    $DataGridViewComboBoxColumnList[$colIndex].DataSource = $ColumnDropdownDataTableList[$colIndex]
    $DataGridViewComboBoxColumnList[$colIndex].ValueMember = $grid_column.Name
    $DataGridViewComboBoxColumnList[$colIndex].DisplayMember = $grid_column.Name
    # 核心修正:DataPropertyName只需填写绑定的列名,无需取属性值
    $DataGridViewComboBoxColumnList[$colIndex].DataPropertyName = $grid_column.Name
}

# 按列顺序动态添加行,避免手动写属性顺序错位问题
$ServiceList | ForEach-Object {
    $rowValues = $grid_column_list | ForEach-Object { $_.GetValue($_) }
    [void] $DataTable1.Rows.Add($rowValues)
}

# 初始化窗体
$Form = New-Object System.Windows.Forms.Form
$Form.Size = New-Object System.Drawing.Size(800,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.Point(0,0) 
$DGV.Size = New-Object System.Drawing.Size(780,400)
$DGV.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",10)
$DGV.BackgroundColor = [System.Drawing.Color]::White
$DGV.BorderStyle = "Fixed3D"
$DGV.AlternatingRowsDefaultCellStyle.BackColor = [System.Drawing.Color]::FromArgb(230,230,230)
$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.AutoGenerateColumns = $False
# 先加列再绑定数据源,保证绑定关系正常
$DGV.Columns.AddRange($DataGridViewComboBoxColumnList)
$DGV.DataSource = $DataTable1
$Form.Controls.Add($DGV)

# 导出按钮
$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.Point(10,420) 
$Button.Size = New-Object System.Drawing.Size(100,30)
$Button.Text = "导出"
$Form.Controls.Add($Button)

$Button.Add_Click({
    $DataTable1 | Out-GridView
})

[void] $Form.ShowDialog()

内容的提问来源于stack exchange,提问作者Darwin Ranzone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 12:06:05