PowerShell:按下按钮时 Datagrid 不显示新数据
PowerShell: Datagrid not showing new data when button pressed
我在 Windows.Forms.DataGrid 中使用 PowerShell 来处理 CSV 文件中的数据。下面包含示例代码以复制我的问题。该脚本将生成一个带有数据网格和按钮的基本表单。我只想在每次按下 "add" 按钮时向数据网格添加新行。
目前,单击添加按钮时,会在数据网格中添加一个新行。您可以看到 VMcount 增加以及新数据源内容,但它不会显示在数据网格中。我发现了一些关于 .autogeneratecolumn 的 post 但这个选项在 powershell 中不可用。只是不知道我错过了什么...
Function btnVMAdd(){
Write-Host "Adding Line"
Write-Host "VM COUNT: $($dtgVMList.DataSource.count) "
$array = $dtgVMList.DataSource
$array | Out-Host
$dtgVMList.DataSource | Out-Host
$object = New-Object –TypeName PSObject
$object | Add-Member –MemberType NoteProperty –Name VMName –Value "new vm"
$object | Add-Member –MemberType NoteProperty –Name IPAddr –Value "new ip"
$array.Add($object)
$dtgVMList.DataSource= $array
}
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
#This creates the form and sets its size and position
$objForm = New-Object System.Windows.Forms.Form
$objForm.Text = "Simple Form"
$objForm.Size = New-Object System.Drawing.Size(600,600)
$objForm.StartPosition = "CenterScreen"
$gbxVMList = New-Object System.Windows.Forms.GroupBox
$gbxVMList.Location = New-Object System.Drawing.Point(20,20)
$gbxVMList.size = New-Object System.Drawing.Size(500,500)
$gbxVMList.text = "VM Deployment List"
$objForm.Controls.Add($gbxVMList)
$dtgVMList = New-Object System.Windows.Forms.DataGrid
$dtgVMList.Location = New-Object System.Drawing.Point(5,15)
$dtgVMList.Size = New-Object System.Drawing.Size(490,300)
$dtgVMList.DataBindings.DefaultDataSourceUpdateMode = 0
$dtgVMList.HeaderForeColor = [System.Drawing.Color]::FromArgb(255,0,0,0)
$dtgVMList.Name = "VMListData"
$dtgVMList.DataMember = ""
$dtgVMList.TabIndex = 0
$dtgVMList.Autog
$gbxVMList.Controls.Add($dtgVMList)
$btnVMAdd = New-Object System.Windows.Forms.Button
$btnVMAdd.Location = New-Object System.Drawing.Point(150,350)
$btnVMAdd.Size = New-Object System.Drawing.Size(90,20)
$btnVMAdd.Text = "Add VM"
$btnVMAdd.Add_Click({btnVMAdd})
$gbxVMList.Controls.Add($btnVMAdd)
$Global:json = @{}
$Global:json | Add-Member -MemberType NoteProperty -Name vmlist -Value ""
$array = New-Object System.Collections.ArrayList
$object = New-Object –TypeName PSObject
$object | Add-Member –MemberType NoteProperty –Name VMName –Value "VM Name"
$object | Add-Member –MemberType NoteProperty –Name IPAddr –Value "IP Addr"
$array.Add($object)
$global:json.vmlist = $array
$dtgVMList.DataSource = $array
$array = $dtgVMList.DataSource
$object = New-Object –TypeName PSObject
$object | Add-Member –MemberType NoteProperty –Name VMName –Value "VM Name2"
$object | Add-Member –MemberType NoteProperty –Name IPAddr –Value "IP Addr"
$array.Add($object)
$dtgVMList.DataSource = $array
$array = $dtgVMList.DataSource
$object = New-Object –TypeName PSObject
$object | Add-Member –MemberType NoteProperty –Name VMName –Value "VM Name3"
$object | Add-Member –MemberType NoteProperty –Name IPAddr –Value "IP Addr"
$array.Add($object)
$dtgVMList.DataSource = $array
$objForm.Add_Shown({$objForm.Activate()})
[void] $objForm.ShowDialog()
我想如果你指定:
$dtgVMList.DataBindings.DefaultDataSourceUpdateMode = 0
那你必须在赋值后手动刷新绑定:
$dtgVMList.DataSource= $array
$dtgVMList.Refresh
或指定另一种刷新方式。
我在 Windows.Forms.DataGrid 中使用 PowerShell 来处理 CSV 文件中的数据。下面包含示例代码以复制我的问题。该脚本将生成一个带有数据网格和按钮的基本表单。我只想在每次按下 "add" 按钮时向数据网格添加新行。
目前,单击添加按钮时,会在数据网格中添加一个新行。您可以看到 VMcount 增加以及新数据源内容,但它不会显示在数据网格中。我发现了一些关于 .autogeneratecolumn 的 post 但这个选项在 powershell 中不可用。只是不知道我错过了什么...
Function btnVMAdd(){
Write-Host "Adding Line"
Write-Host "VM COUNT: $($dtgVMList.DataSource.count) "
$array = $dtgVMList.DataSource
$array | Out-Host
$dtgVMList.DataSource | Out-Host
$object = New-Object –TypeName PSObject
$object | Add-Member –MemberType NoteProperty –Name VMName –Value "new vm"
$object | Add-Member –MemberType NoteProperty –Name IPAddr –Value "new ip"
$array.Add($object)
$dtgVMList.DataSource= $array
}
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
#This creates the form and sets its size and position
$objForm = New-Object System.Windows.Forms.Form
$objForm.Text = "Simple Form"
$objForm.Size = New-Object System.Drawing.Size(600,600)
$objForm.StartPosition = "CenterScreen"
$gbxVMList = New-Object System.Windows.Forms.GroupBox
$gbxVMList.Location = New-Object System.Drawing.Point(20,20)
$gbxVMList.size = New-Object System.Drawing.Size(500,500)
$gbxVMList.text = "VM Deployment List"
$objForm.Controls.Add($gbxVMList)
$dtgVMList = New-Object System.Windows.Forms.DataGrid
$dtgVMList.Location = New-Object System.Drawing.Point(5,15)
$dtgVMList.Size = New-Object System.Drawing.Size(490,300)
$dtgVMList.DataBindings.DefaultDataSourceUpdateMode = 0
$dtgVMList.HeaderForeColor = [System.Drawing.Color]::FromArgb(255,0,0,0)
$dtgVMList.Name = "VMListData"
$dtgVMList.DataMember = ""
$dtgVMList.TabIndex = 0
$dtgVMList.Autog
$gbxVMList.Controls.Add($dtgVMList)
$btnVMAdd = New-Object System.Windows.Forms.Button
$btnVMAdd.Location = New-Object System.Drawing.Point(150,350)
$btnVMAdd.Size = New-Object System.Drawing.Size(90,20)
$btnVMAdd.Text = "Add VM"
$btnVMAdd.Add_Click({btnVMAdd})
$gbxVMList.Controls.Add($btnVMAdd)
$Global:json = @{}
$Global:json | Add-Member -MemberType NoteProperty -Name vmlist -Value ""
$array = New-Object System.Collections.ArrayList
$object = New-Object –TypeName PSObject
$object | Add-Member –MemberType NoteProperty –Name VMName –Value "VM Name"
$object | Add-Member –MemberType NoteProperty –Name IPAddr –Value "IP Addr"
$array.Add($object)
$global:json.vmlist = $array
$dtgVMList.DataSource = $array
$array = $dtgVMList.DataSource
$object = New-Object –TypeName PSObject
$object | Add-Member –MemberType NoteProperty –Name VMName –Value "VM Name2"
$object | Add-Member –MemberType NoteProperty –Name IPAddr –Value "IP Addr"
$array.Add($object)
$dtgVMList.DataSource = $array
$array = $dtgVMList.DataSource
$object = New-Object –TypeName PSObject
$object | Add-Member –MemberType NoteProperty –Name VMName –Value "VM Name3"
$object | Add-Member –MemberType NoteProperty –Name IPAddr –Value "IP Addr"
$array.Add($object)
$dtgVMList.DataSource = $array
$objForm.Add_Shown({$objForm.Activate()})
[void] $objForm.ShowDialog()
我想如果你指定:
$dtgVMList.DataBindings.DefaultDataSourceUpdateMode = 0
那你必须在赋值后手动刷新绑定:
$dtgVMList.DataSource= $array
$dtgVMList.Refresh
或指定另一种刷新方式。