【问题标题】:Datagridview Export HeaderTextDatagridview 导出 HeaderText
【发布时间】:2017-04-19 18:22:58
【问题描述】:

我正在使用下面的 datagridview。我正在尝试导出标题名称。

如果您运行此代码并点击导出,它只会输出用户最初可以看到的列标题(直到“模型”),但不会输出“版本”或“上次重新启动”。如果在点击导出之前向右滚动,它将显示所有列名。

[void] [System.Reflection.Assembly]::LoadWithPartialName(“System.Windows.Forms”)
[void] [System.Reflection.Assembly]::LoadWithPartialName(“System.Drawing”)
$form = New-Object System.Windows.Forms.Form
$form.Size = New-Object System.Drawing.Size(1040,518)
$form.KeyPreview = $true
$form.StartPosition = ‘centerscreen’
$form.BackColor = 'MidnightBlue'
$form.Add_KeyDown({if($_.KeyCode -eq "Escape"){$form.Close()}})
$form.Text = "Dialog Box 3.4" 
$form.Icon = [system.drawing.icon]::ExtractAssociatedIcon($PSHOME + "\powershell_ise.exe")
$form.MinimumSize = New-Object System.Drawing.Size(1040,518)

$buttonPanel4 = New-Object Windows.Forms.Panel
$buttonPanel4.Size = New-Object Drawing.Size @(290,70)
$buttonPanel4.Dock = "left"
$buttonPanel4.BackColor = 'MidnightBlue'

$DataGrid = New-Object System.Windows.Forms.DataGridView
$DataGrid.Location = New-Object System.Drawing.Size(298,29)
$DataGrid.Dock = "Fill"
$DataGrid.BorderStyle = ‘FixedSingle’
$DataGrid.ColumnHeadersDefaultCellStyle.Font = New-Object System.Drawing.Font(“segoe UI”,9.25)
$DataGrid.DefaultCellStyle.Font = New-Object System.Drawing.Font(“segoe UI”,9.25)
$DataGrid.AllowUserToAddRows = $false
$DataGrid.RowHeadersVisible = $false
$DataGrid.BackgroundColor = "White"

$DataGrid.ColumnCount = 10
$DataGrid.Columns[0].Name = ‘Machine’
$DataGrid.Columns[1].Name = ‘OperatingSystem’
$DataGrid.Columns[2].Name = ‘ServicePack’
$DataGrid.Columns[3].Name = ‘Architecture’
$DataGrid.Columns[4].Name = ‘Domain’
$DataGrid.Columns[5].Name = ‘PhysicalMemory’
$DataGrid.Columns[6].Name = ‘Manufacturer’
$DataGrid.Columns[7].Name = ‘Model’
$DataGrid.Columns[8].Name = ‘Version’
$DataGrid.Columns[9].Name = ‘Last Rebooted’
$DataGrid.Columns[9].Width = '140'

$Exportbutton = New-Object System.Windows.Forms.Button
$Exportbutton.Location = New-Object System.Drawing.Size(9,350)
$Exportbutton.Size = New-Object System.Drawing.Size(85,23)
$Exportbutton.Text = “Export-CSV”
$Exportbutton.BackColor = ‘LightGray’
$Exportbutton.UseVisualStyleBackColor = $true
$Exportbutton.Font = New-Object System.Drawing.Font(“segoe UI”,9)
$Exportbutton.Add_Click({
    $columnNames = $null
    $columnNames = $DataGrid.Columns[0].HeaderText
    for($i = 1; $i -lt $DataGrid.ColumnCount;$i++){
        $columnNames += ",$($DataGrid.Columns[$i].HeaderText)"
        write-host $($DataGrid.Columns[$i].HeaderText) -ForegroundColor Magenta
    }
    write-host $columnNames -foregroundcolor cyan
})

$buttonPanel4.Controls.Add($Exportbutton)
$form.Controls.Add($DataGrid)
$form.Controls.Add($buttonPanel4)
$form.ShowDialog() | out-null

出现这种情况是否有原因?如何在不先向右滚动的情况下导出所有列名?

【问题讨论】:

  • 什么是变量$buttonPanel4
  • 对不起,我把这个从我的大程序中拼接出来,忘了包括面板。它在左边,数据网格在右边。

标签: winforms powershell datagridview


【解决方案1】:

正如@pandemic 指出的那样,$buttonPanel4 没有定义/显示,而且您似乎正在将DataGrid.Dock 属性设置为Fill,如果它的面板存在,它将覆盖这个按钮。

我没有答案为什么标题文本返回一个空字符串,直到标题在数据网格中可见。我猜这是因为尚未设置 HeaderText 属性。我假设如果尚未设置 HeaderTexts 属性,如果需要,它将默认为列 Name 属性。如果您像使用Name 属性一样设置每列HeaderText 属性,则不会发生此问题。

因此,要么设置每一列 HeaderText,要么使用其 Name 属性,如下面的代码所示。

我更改了下面的代码以使用列名称而不是标题文本,它似乎可以正常工作。此外,我更改了将逗号插入到 $columnNames 字符串变量的方式,以在索引 0 处开始循环。希望这会有所帮助。

$Exportbutton.Add_Click({
   $columnNames = $null
   for($i = 0; $i -lt $DataGrid.ColumnCount;$i++){
     $columnNames += "$($DataGrid.Columns[$i].Name)"
     if ($i -lt $DataGrid.ColumnCount - 1) {
       $columnNames += ","
     }
     write-host $($DataGrid.Columns[$i].Name) -ForegroundColor Magenta
   }
   write-host $columnNames -foregroundcolor cyan
})

【讨论】:

  • 您通过引用Name 而不是HeaderText 的假设是正确的。当我更改它时,我可以根据需要获取所有列名。感谢您的回复!
猜你喜欢
  • 2012-03-19
  • 1970-01-01
  • 1970-01-01
  • 2012-03-30
  • 1970-01-01
  • 2015-08-15
  • 2016-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多