如何创建一个 Powershell 布尔计算值 属性,其值可以被 WinForm 复选框识别?
How do you create a Powershell boolean Calculated Property with a value that can be recognised by a WinForm Checkbox?
在检索更大的数据集期间,我试图在 Powershell 中创建一个名为 'Checked' 的计算 属性,初始值为 $false
:
$var = [System.Collections.ArrayList](@($dataSource | Select-Object -Unique -Property @{Name='Checked';Expression={$false}},ID,Name))
然后在从 Powershell 生成的 WinForm DataGridView 对象中可视化:
$bAnalysesDataGrid = [System.Windows.Forms.DataGridView]::new()
$bAnalysesDataGrid.location = [System.Drawing.Size]::new((20*$w),(210*$h))
$bAnalysesDataGrid.width = 1960*$w
$bAnalysesDataGrid.height = 600*$h
[void]$bAnalysesDataGrid.Columns.Add([System.Windows.Forms.DataGridViewCheckBoxColumn]::new())
[void]$bAnalysesDataGrid.Columns.Add([System.Windows.Forms.DataGridViewTextBoxColumn]::new())
[void]$bAnalysesDataGrid.Columns.Add([System.Windows.Forms.DataGridViewTextBoxColumn]::new())
$bAnalysesDataGrid.Columns[0].Name = "Checked"
$bAnalysesDataGrid.Columns[0].DataPropertyName = "Checked"
$bAnalysesDataGrid.Columns[1].Name = "ID"
$bAnalysesDataGrid.Columns[1].DataPropertyName = "ID"
$bAnalysesDataGrid.Columns[2].Name = "Name"
$bAnalysesDataGrid.Columns[2].DataPropertyName = "Name"
$bAnalysesDataGrid.DataSource = $var
但是,当 'Checked' 属性 加载到第一列时,会出现以下错误,这表明 $false 正在作为字符串接收:
The following exception occurred in the DataGridView:
System.FormatException: Value 'False' cannot be converted to type 'Boolean'.
如何创建一个与 CheckBox 一起使用的计算 属性,以 $false 值开始?我已经尝试了零、字符串和 $ 符号的各种组合,其中 none 似乎表现正确。
完整错误信息:
Windows Forms 中的数据绑定逻辑不太清楚如何正确调用 PowerShell 的扩展属性,因此计算属性、注释属性或 [pscustomobject]
成员无法很好地使用此方法.
相反,使用 class
关键字定义真正的 .NET 类型,然后成员绑定应该起作用:
class CheckableDataRow {
[bool]$Checked
[int]$ID
[string]$Name
}
# fetch/construct data rows
$vars = $dataSource | Select-Object -Unique -Property @{Name='Checked';Expression={$false}},ID,Name
# convert to CheckableDataRow's
$vars = $vars -as [CheckableDataRow[]]
# rest of the script remains the same...
在检索更大的数据集期间,我试图在 Powershell 中创建一个名为 'Checked' 的计算 属性,初始值为 $false
:
$var = [System.Collections.ArrayList](@($dataSource | Select-Object -Unique -Property @{Name='Checked';Expression={$false}},ID,Name))
然后在从 Powershell 生成的 WinForm DataGridView 对象中可视化:
$bAnalysesDataGrid = [System.Windows.Forms.DataGridView]::new()
$bAnalysesDataGrid.location = [System.Drawing.Size]::new((20*$w),(210*$h))
$bAnalysesDataGrid.width = 1960*$w
$bAnalysesDataGrid.height = 600*$h
[void]$bAnalysesDataGrid.Columns.Add([System.Windows.Forms.DataGridViewCheckBoxColumn]::new())
[void]$bAnalysesDataGrid.Columns.Add([System.Windows.Forms.DataGridViewTextBoxColumn]::new())
[void]$bAnalysesDataGrid.Columns.Add([System.Windows.Forms.DataGridViewTextBoxColumn]::new())
$bAnalysesDataGrid.Columns[0].Name = "Checked"
$bAnalysesDataGrid.Columns[0].DataPropertyName = "Checked"
$bAnalysesDataGrid.Columns[1].Name = "ID"
$bAnalysesDataGrid.Columns[1].DataPropertyName = "ID"
$bAnalysesDataGrid.Columns[2].Name = "Name"
$bAnalysesDataGrid.Columns[2].DataPropertyName = "Name"
$bAnalysesDataGrid.DataSource = $var
但是,当 'Checked' 属性 加载到第一列时,会出现以下错误,这表明 $false 正在作为字符串接收:
The following exception occurred in the DataGridView: System.FormatException: Value 'False' cannot be converted to type 'Boolean'.
如何创建一个与 CheckBox 一起使用的计算 属性,以 $false 值开始?我已经尝试了零、字符串和 $ 符号的各种组合,其中 none 似乎表现正确。
完整错误信息:
Windows Forms 中的数据绑定逻辑不太清楚如何正确调用 PowerShell 的扩展属性,因此计算属性、注释属性或 [pscustomobject]
成员无法很好地使用此方法.
相反,使用 class
关键字定义真正的 .NET 类型,然后成员绑定应该起作用:
class CheckableDataRow {
[bool]$Checked
[int]$ID
[string]$Name
}
# fetch/construct data rows
$vars = $dataSource | Select-Object -Unique -Property @{Name='Checked';Expression={$false}},ID,Name
# convert to CheckableDataRow's
$vars = $vars -as [CheckableDataRow[]]
# rest of the script remains the same...