Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winforms PowerShell DataGridView ComboxColumn默认值_Winforms_Powershell_Datagridview - Fatal编程技术网

Winforms PowerShell DataGridView ComboxColumn默认值

Winforms PowerShell DataGridView ComboxColumn默认值,winforms,powershell,datagridview,Winforms,Powershell,Datagridview,我试图将DataGridViewComboxColumn的默认值设置为变量,但找不到要设置的属性 $Column2 = New-Object System.Windows.Forms.DataGridViewComboBoxColumn $Column2.width = 60 $Column2.name = "Status" $Column2.DataSource = $DropDownArray $DataGrid.Columns.Add($Column2) 我试过: $

我试图将DataGridViewComboxColumn的默认值设置为变量,但找不到要设置的属性

$Column2 = New-Object System.Windows.Forms.DataGridViewComboBoxColumn
$Column2.width = 60
$Column2.name = "Status"
$Column2.DataSource = $DropDownArray
$DataGrid.Columns.Add($Column2)
我试过:

$Column2.Value = "C"
$Column2.ValueMember = $DDI
$Column2.DataPropertyName = $DDI
$Column2.DisplayMember = $DDI
$Column2.Text = $DropDown.SelectedItem
If($Column2.Index -ge "0"){$Column2.ValueMember = "C"}
$DDI
回调数组项。 感谢您的帮助

编辑 我想我的沟通不够好。以下是我到目前为止所做的(当然,忽略所有被注释掉的内容):

我的目标是让
$Column1
检查当天是否计划了任务(取决于用户),并将
$Column2
默认为导出状态(FVR、C、O或p),允许用户在数据不正确时将其更改为另一个选项。因此,最终我希望根据以下语句设置默认值:

If($_.Status -eq "Open"){$Column2.ValueMember = <WHATEVER IT TAKES TO GET THE CURRENT VALUE TO "O">
$Column2.DataPropertyName = <WHATEVER IT TAKES TO GET THE CURRENT VALUE TO "O">
$Column2.DisplayMember = <WHATEVER IT TAKES TO GET THE CURRENT VALUE TO "O">
If($\状态-eq“打开”){$Column2.ValueMember=
$Column2.DataPropertyName=
$Column2.DisplayMember=

每个值都是相同的。($状态是导入的CSV中的一列。)现在我就是搞不清楚。我的数组中应该有更多的值吗?我现在为
ValueMember
尝试的所有内容都返回说
字段调用-无论什么-不存在

当您将行添加到DataGridView或数据绑定到DataGridView时,您将为该列指定默认值或选定值n并将其转换为您的组合框。ValueMember是您要查找的,因为它与数据的实际值相关联,而不是显示在组合框(DisplayMember)中的值。ValueMember和DisplayMember可以相同,但不必相同

请参见下面的示例。这将创建颜色名称和RGB值的数据源

# Datatable for your CSV content
$DataTable1 = New-Object System.Data.DataTable
[void] $DataTable1.Columns.Add("Fruit")
[void] $DataTable1.Columns.Add("RGB")

# Your CSV content
@"
Fruit,RGB
apple,ff0000
apple,00ff00
kiwi,00ff00
"@ | ConvertFrom-Csv | ForEach-Object {
    [void] $DataTable1.Rows.Add($_.Fruit, $_.RGB)
    }

# Acceptable color values datatable - for your combobox
$DataTable2 = New-Object System.Data.DataTable
[void] $DataTable2.Columns.Add("RGB")
[void] $DataTable2.Columns.Add("Color")
# Manually add rows. You can programmatically add the rows as well 
[void] $DataTable2.Rows.Add("ff0000", "red")
[void] $DataTable2.Rows.Add("00ff00", "green")
[void] $DataTable2.Rows.Add("0000ff", "blue")

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

# Form event handlers
$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)

# Datagridview columns
$Column1 = New-Object System.Windows.Forms.DataGridViewTextBoxColumn
$Column1.Name = "Fruit"
$Column1.HeaderText = "Fruit"
$Column1.DataPropertyName = "Fruit"
$Column1.AutoSizeMode = "Fill"

$Column2 = New-Object System.Windows.Forms.DataGridViewComboBoxColumn
$Column2.Name = "Color"
$Column2.HeaderText = "Color"
$Column2.DataSource = $DataTable2
$Column2.ValueMember = "RGB"
$Column2.DisplayMember = "Color"
$Column2.DataPropertyName = "RGB"

$DGV.Columns.AddRange($Column1, $Column2)

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

当您向DataGridView添加行或绑定数据时,您将为该列指定默认值或选定值,然后将其转换为您的combobox。ValueMember是您要查找的内容,因为它与数据的实际值相关联,而不是显示在combobox(DisplayMember)中的内容.ValueMember和DisplayMember可以相同,但不必相同

请参见下面的示例。这将创建颜色名称和RGB值的数据源

# Datatable for your CSV content
$DataTable1 = New-Object System.Data.DataTable
[void] $DataTable1.Columns.Add("Fruit")
[void] $DataTable1.Columns.Add("RGB")

# Your CSV content
@"
Fruit,RGB
apple,ff0000
apple,00ff00
kiwi,00ff00
"@ | ConvertFrom-Csv | ForEach-Object {
    [void] $DataTable1.Rows.Add($_.Fruit, $_.RGB)
    }

# Acceptable color values datatable - for your combobox
$DataTable2 = New-Object System.Data.DataTable
[void] $DataTable2.Columns.Add("RGB")
[void] $DataTable2.Columns.Add("Color")
# Manually add rows. You can programmatically add the rows as well 
[void] $DataTable2.Rows.Add("ff0000", "red")
[void] $DataTable2.Rows.Add("00ff00", "green")
[void] $DataTable2.Rows.Add("0000ff", "blue")

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

# Form event handlers
$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)

# Datagridview columns
$Column1 = New-Object System.Windows.Forms.DataGridViewTextBoxColumn
$Column1.Name = "Fruit"
$Column1.HeaderText = "Fruit"
$Column1.DataPropertyName = "Fruit"
$Column1.AutoSizeMode = "Fill"

$Column2 = New-Object System.Windows.Forms.DataGridViewComboBoxColumn
$Column2.Name = "Color"
$Column2.HeaderText = "Color"
$Column2.DataSource = $DataTable2
$Column2.ValueMember = "RGB"
$Column2.DisplayMember = "Color"
$Column2.DataPropertyName = "RGB"

$DGV.Columns.AddRange($Column1, $Column2)

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

这是该Classic的示例,我认为它是valuemember,但我没有得到它的上下文。这是该Classic的示例,我认为它是valuemember,但我没有得到它的上下文。$DropDownArray似乎没有一个名为.columns的函数,我对每一行都有以下错误:
不能对空值表达式调用方法。+[void]$DropDownArray.Columns.Add(“RGB”)
。确保它是一个DataTable对象,而不是您文章中的数组。您能测试您的答案吗?或者用适合我的答案替换它吗?我无法让您的答案正常工作(上面列出的错误)我正在努力解决这个问题。请参阅修订后的文章。它经过测试并与版本3一起使用。明白了。现在它有了意义。一旦我了解了如何使用事件处理程序以当前状态导出数据,我就可以进行设置了。谢谢!$DropDownArray似乎没有一个名为.columns的函数,我每行都会收到以下错误:
您不能对空值表达式调用方法。+[void]$DropDownArray.Columns.Add(“RGB”)
。请确保它是DataTable对象,而不是您文章中的数组。您能测试您的答案吗,或者用适合我的答案替换它吗?我无法让您的答案正常工作(上面列出的错误)我正在努力解决这个问题。请参阅修订后的文章。它经过测试并与版本3一起使用。明白了。现在它有了意义。一旦我了解如何使用事件处理程序以当前状态导出数据,我就可以设置了。谢谢!