无法为DataGridView中的特定行着色

时间:2016-02-09 12:33:39

标签: powershell datagridview colors icons

我正在运行一个PowerShell表单,从数组中提取信息并显示在DataGridView中。我希望能够根据特定字段中的文本突出显示/着色特定行。我非常接近,但我无法弄清楚如何定位要突出显示的特定行。目前,整个网格都会突出显示。最后,我想在一个新的字段左边有一个漂亮的图标来表示该行,但是现在突出显示将会有效。

$form = New-Object System.Windows.Forms.Form
$form.Size = New-Object System.Drawing.Size(600,440)
$dataGridView = New-Object System.Windows.Forms.DataGridView
$dataGridView.Size=New-Object System.Drawing.Size(800,400)
$form.Controls.Add($dataGridView)


$dataGridView.ColumnCount = 4
$dataGridView.ColumnHeadersVisible = $true
$dataGridView.Columns[0].Name = "Name"
$dataGridView.Columns[1].Name = "ID"
$dataGridView.Columns[2].Name = "Description"
$dataGridView.Columns[3].Name = "Memory"
$dataGridView.Columns[0].width = 240

get-process | foreach {
$dataGridView.Rows.Add($_.Name,$_.ID,$_.Description,$_.WorkingSet) | out-null
}

foreach ($Row in $dataGridView.Rows) {
Write-Host $Row.Index $Row.Value
}

foreach ($Row in $dataGridView.Rows) {
   if ($Row.Name -eq 'chrome') {
       $row.defaultcellstyle.backcolor = "Yellow"
   } else {
       $row.defaultcellstyle.backcolor = "Red"
   }
}

[void]$form.ShowDialog() 

1 个答案:

答案 0 :(得分:1)

$row没有name属性。您可以通过$row | Get-Member进行确认。因此,$Row.Name始终为空,条件将评估为$false,因此您看到的是红色的墙。

foreach ($Row in $dataGridView.Rows) {
   if ($Row.Cells[0].Value -eq 'chrome') {
       $row.defaultcellstyle.backcolor = "Yellow"
   } else {
       $row.defaultcellstyle.backcolor = "Red"
   }
}

由于您有第一个单元格作为您的名称列,我们现在查看每行中第一个单元格的值以进行比较。仍然希望看看是否有更好的方式作为假设第一个位置,即使在这种情况下是正确的,似乎不是最好的方法。不过,它现在正确地突出显示。

我不知道这是不是一个错字,但你也在对一个字符串进行算术比较。因此,假设我们没有其他问题,$Row.Name - 'chrome'应该是$Row.Name -eq 'chrome'