在檢索更大的資料集期間,我試圖在 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 是作為字串接收的:
DataGridView 中發生以下例外: System.FormatException: 值 'False' 無法轉換為型別 'Boolean'。
如何創建與 CheckBox 一起使用的計算屬性,以 $false 值開始?我嘗試了零、字串和 $ 符號的各種組合,但似乎沒有一個表現正確。
完整的錯誤資訊:

uj5u.com熱心網友回復:
Windows 表單中的資料系結邏輯不太清楚如何正確呼叫 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...
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/399968.html
