PowerShell脚本输出至DataGridView问题及自定义列需求
解决PowerShell中AD用户组绑定DataGridView无显示及自定义列问题
问题分析
当前代码存在几个关键问题导致DataGridView无内容:
- 错误地用双引号包裹数组变量,将数组转成了单个字符串,
ItemsSource需要集合类型而非字符串 - 拼写错误:
ItemSource应为ItemsSource(缺少字母s) - 未预先定义DataGridView的列,无法正确映射数据并显示自定义列名
修复步骤及代码
1. 预先定义自定义列
先给DataGridView添加一列,设置列头为所属组(对应原需求“Member Of”的中文翻译):
# 创建自定义列并添加到DataGridView $groupColumn = New-Object System.Windows.Forms.DataGridViewTextBoxColumn $groupColumn.HeaderText = "所属组" $groupColumn.DataPropertyName = "GroupName" # 需与后续绑定对象的属性名对应 $var_DataGridView.Columns.Add($groupColumn)
2. 修正下拉框选择事件代码
将数组转为包含对应属性的对象集合,同时修正拼写错误,去掉不必要的双引号:
$var_comboBox.Add_SelectionChanged({ $item = $var_comboBox.SelectedItem.Content switch ($item) { "domain1" { $var_DataGridView.ItemsSource = $domain1Groups | ForEach-Object { [PSCustomObject]@{ GroupName = $_ } } } "domain2" { $var_DataGridView.ItemsSource = $domain2Groups | ForEach-Object { [PSCustomObject]@{ GroupName = $_ } } } "domain3" { $var_DataGridView.ItemsSource = $domain3Groups | ForEach-Object { [PSCustomObject]@{ GroupName = $_ } } } } })
3. 优化AD组获取代码(可选)
可以直接在获取AD组时生成对象集合,后续绑定无需再次转换:
$domain1Groups = (Get-ADUser -Identity $var_userName.Text -Server domain1 -Properties MemberOf).MemberOf | ForEach-Object { [PSCustomObject]@{ GroupName = $_ -Replace 'CN=', '' -Replace ',.*', '' } } # domain2、domain3的获取代码同理修改
之后绑定可直接执行:$var_DataGridView.ItemsSource = $domain1Groups
关键要点
- DataGridView的
ItemsSource需要绑定对象集合,而非纯字符串数组,这样才能与自定义列的DataPropertyName匹配 - 确保列的
DataPropertyName和绑定对象的属性名完全一致 - 注意属性名拼写:
ItemsSource是正确的属性名
内容的提问来源于stack exchange,提问作者Toon
相关产品推荐
相关产品推荐

