DataGridView 未刷新

DataGridView is not refreshing

提问人:cosmo_ 提问时间:11/16/2023 更新时间:11/16/2023 访问量:53

问:

我的脚本有问题。我有一个 DataGridView,我想将每个 import-csv 的数据插入到变量中,当我尝试刷新它显示插入数据的 DataGridView 时,它什么也没做。$DataGridView.DataSource

这是完整的脚本(如果你想自己重现它)(尝试刷新它的部分用#突出显示):

[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
Add-Type -AssemblyName Microsoft.VisualBasic

# Create the main window
$Mainform = New-Object System.Windows.Forms.Form
$Mainform.Text = "Support Tool"
$Mainform.WindowState = [System.Windows.Forms.FormWindowState]::Maximized
$Mainform.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::FixedSingle
$Mainform.MaximizeBox = $true

# Create the DataGridView
$DataGridView = New-Object Windows.Forms.DataGridView
$DataGridView.Location = New-Object Drawing.Point(25, 25)
$DataGridView.Size = New-Object Drawing.Size(1600, 775)
$DataGridView.ReadOnly = $true
$DataGridView.AllowUserToAddRows = $false
$DataGridView.AutoGenerateColumns = $true
$Mainform.Controls.Add($DataGridView)
$dataTable = New-Object System.Data.DataTable
$dataTable.Columns.Add("Customer") | Out-Null
$dataTable.Columns.Add("Problem") | Out-Null
$dataTable.Columns.Add("Solution") | Out-Null
$dataTable.Columns.Add("Email") | Out-Null
$dataTable.Columns.Add("Phone") | Out-Null
$dataTable.Columns.Add("ID") | Out-Null

##################################################################################################

$DataImport = Import-Csv -Path "C:\Scripts\Tool.csv" -Delimiter ","
$DataImport = $DataImport | Format-Table
$DataGridView.DataSource = $DataImport
$DataGridView.Refresh()

##################################################################################################

function Add-DataGridView {
    param (
        [string]$toderaResult,
        [string]$AnnahmeartResult
    )
    $dataRow = $dataTable.NewRow()
    $dataRow["Customer"] = $kundennametextBox.Text
    $dataRow["Problem"] = $AnliegentextBox.Text
    $dataRow["Solution"] = $LosungtextBox.Text
    $dataRow["Email"] = $AnnahmearttextBox.Text
    $dataRow["Phone"] = $ZeittextBox.Text
    $dataRow["ID"] = $toderatextBox.Text
    $dataTable.Rows.Add($dataRow)
    $DataGridView.DataSource = $dataTable
    $DataGridView.Columns[0].Width = 430
    $DataGridView.Columns[1].Width = 430
    $DataGridView.Columns[2].Width = 430
    $DataGridView.Columns[3].Width = 88
    $DataGridView.Columns[4].Width = 87
    $DataGridView.Columns[5].Width = 87
}



#$dataGridView.AutoSizeColumnsMode = [System.Windows.Forms.DataGridViewAutoSizeColumnsMode]::AllCells

$nrButton = New-Object System.Windows.Forms.Button
$nrButton.Location = New-Object System.Drawing.Point(1365, 810)
$nrButton.Size = New-Object System.Drawing.Size(100,25)
$nrButton.Text = 'Neuer Eintrag'
$Mainform.Controls.Add($nrButton)

$nrButton.Add_Click({
    # NRF Erstellen
    $nrform = New-Object System.Windows.Forms.Form
    $nrform.Text = "Support Tool"
    $nrform.Width = 800
    $nrform.Height = 500
    $nrform.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::FixedSingle
    $nrform.MaximizeBox = $false

    # NRF Part erstellen Kundenname
    $kundennamesearchtext = "Kundenname:"
    $kundenamelabel = New-Object System.Windows.Forms.Label
    $kundenamelabel.Text = $kundennamesearchtext
    $kundenamelabel.AutoSize = $true
    $kundenamelabel.Location = New-Object System.Drawing.Point(25, 20)
    $nrform.Controls.Add($kundenamelabel)
    $kundennametextBox = New-Object System.Windows.Forms.TextBox
    $kundennametextBox.Location = New-Object System.Drawing.Point(25,40)
    $kundennametextBox.Size = New-Object System.Drawing.Size(350,25)
    $nrform.Controls.Add($kundennametextBox)

    # NRF Part erstellen Anliegen
    $Anliegensearchtext = "Anliegen:"
    $Anliegenlabel = New-Object System.Windows.Forms.Label
    $Anliegenlabel.Text = $Anliegensearchtext
    $Anliegenlabel.AutoSize = $true
    $Anliegenlabel.Location = New-Object System.Drawing.Point(25, 80)
    $nrform.Controls.Add($Anliegenlabel)
    $AnliegentextBox = New-Object System.Windows.Forms.TextBox
    $AnliegentextBox.Location = New-Object System.Drawing.Point(25,100)
    $AnliegentextBox.Size = New-Object System.Drawing.Size(350,25)
    $nrform.Controls.Add($AnliegentextBox)

    # NRF Part erstellen Lösung
    $Losungsearchtext = "Massnahmen:"
    $Losunglabel = New-Object System.Windows.Forms.Label
    $Losunglabel.Text = $Losungsearchtext
    $Losunglabel.AutoSize = $true
    $Losunglabel.Location = New-Object System.Drawing.Point(25, 140)
    $nrform.Controls.Add($Losunglabel)
    $LosungtextBox = New-Object System.Windows.Forms.TextBox
    $LosungtextBox.Location = New-Object System.Drawing.Point(25,160)
    $LosungtextBox.Size = New-Object System.Drawing.Size(350,25)
    $nrform.Controls.Add($LosungtextBox)

    # NRF Part erstellen Annahmeart
    $Annahmeartsearchtext = "Annahmeart:"
    $Annahmeartlabel = New-Object System.Windows.Forms.Label
    $Annahmeartlabel.Text = $Annahmeartsearchtext
    $Annahmeartlabel.AutoSize = $true
    $Annahmeartlabel.Location = New-Object System.Drawing.Point(25, 200)
    $nrform.Controls.Add($Annahmeartlabel)
    $AnnahmearttextBox = New-Object System.Windows.Forms.TextBox
    $AnnahmearttextBox.Location = New-Object System.Drawing.Point(25,220)
    $AnnahmearttextBox.Size = New-Object System.Drawing.Size(350,25)
    $nrform.Controls.Add($AnnahmearttextBox)


    # NRF Part erstellen Zeitaufwand
    $Zeitsearchtext = "Zeitaufwand:"
    $Zeitlabel = New-Object System.Windows.Forms.Label
    $Zeitlabel.Text = $Zeitsearchtext
    $Zeitlabel.AutoSize = $true
    $Zeitlabel.Location = New-Object System.Drawing.Point(25, 260)
    $nrform.Controls.Add($Zeitlabel)
    $ZeittextBox = New-Object System.Windows.Forms.TextBox
    $ZeittextBox.Location = New-Object System.Drawing.Point(25,280)
    $ZeittextBox.Size = New-Object System.Drawing.Size(350,25)
    $nrform.Controls.Add($ZeittextBox)


    # NRF Part erstellen Ticket oder Auftrag?
    $toderasearchtext = "Ticket oder Auftrag:"
    $toderalabel = New-Object System.Windows.Forms.Label
    $toderalabel.Text = $toderasearchtext
    $toderalabel.AutoSize = $true
    $toderalabel.Location = New-Object System.Drawing.Point(25, 320)
    $nrform.Controls.Add($toderalabel)
    $toderatextBox = New-Object System.Windows.Forms.TextBox
    $toderatextBox.Location = New-Object System.Drawing.Point(25,340)
    $toderatextBox.Size = New-Object System.Drawing.Size(350,25)
    $nrform.Controls.Add($toderatextBox)

    


    # NRF OK Button
    $nrOKButton = New-Object System.Windows.Forms.Button
    $nrOKButton.Location = New-Object System.Drawing.Point(615, 425)
    $nrOKButton.Size = New-Object System.Drawing.Size(75,25)
    $nrOKButton.Text = 'OK'
    $nrOKButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
    $nrform.Controls.Add($nrOKButton)
    $nrOKButton.Add_Click({
        Add-DataGridView -toderaResult $toderaResult -AnnahmeartResult $AnnahmeartResult
    })

    # NRF Cancel Button
    $nrCancelButton = New-Object System.Windows.Forms.Button
    $nrCancelButton.Location = New-Object System.Drawing.Point(700, 425)
    $nrCancelButton.Size = New-Object System.Drawing.Size(75,25)
    $nrCancelButton.Text = 'Abbrechen'
    $nrCancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
    $nrform.Controls.Add($nrCancelButton)

    $nrCancelButton.Add_Click({
        $nrform.CancelButton = $nrCancelButton
        $nrform.Controls.Add($nrCancelButton)
    })
    $nrform.ShowDialog() | Out-Null

})

$MainCancelButton = New-Object System.Windows.Forms.Button
$MainCancelButton.Location = New-Object System.Drawing.Point(1475, 810)
$MainCancelButton.Size = New-Object System.Drawing.Size(150,25)
$MainCancelButton.Text = 'Speichern und Schliessen'
$MainCancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$Mainform.Controls.Add($MainCancelButton)

$MainCancelButton.Add_Click({
    if($DataGridView.DataSource -ne $null){
        $DataExport = $DataGridView.DataSource
        $DataExport | Export-Csv -Path "C:\Scripts\Tool.csv" -Append -Delimiter ","
    }
    $Mainform.CancelButton = $MainCancelButton
    $Mainform.Controls.Add($MainCancelButton)
})

$Mainform.ShowDialog() | Out-Null

如果您想知道这里是 CSV:

"Customer","Problem","Solution","Email","Phone","ID"
"this","is","a ","wonderful","functioning","test"

如果有人知道任何可以解决我不显示数据的问题的方面,我将不胜感激。

亲切问候 宇宙_

PowerShell WinForms DataGridView

评论

1赞 mclayton 11/16/2023
我不认为这是您问题的原因,但是这一行似乎不合适 - 该 cmdlet 通常用于为控制台输出创建结构化格式设置对象。您可能希望在网格视图中显示实际数据,而不是在执行此操作时显示格式化对象...$DataImport = $DataImport | Format-TableFormat-Table$DataGridView.DataSource = $DataImport
0赞 cosmo_ 11/16/2023
@mclayton 可悲的是,这无济于事。无论我尝试使用还是不使用格式表都无关紧要。
0赞 Nick Abbot 11/16/2023
我很好奇为什么你不直接用 VB 或 C# 在 Visual Studio 中编写这个。
0赞 cosmo_ 11/16/2023
因为我对这些语言一无所知。就像我什至不知道如何在 C 中做一个 Hello World#
1赞 Theo 11/16/2023
尝试删除此行。通过使用 Format-Table,您实际上会销毁数据。Format-* cmdlet 仅用于输出$DataImport = $DataImport | Format-Table

答: 暂无答案