2016-02-09 25 views
1

我正在运行PowerShell表单,它从数组中拉取信息并显示在DataGridView中。我希望能够根据特定字段中的文本突出显示/着色特定行。我非常接近,但我无法弄清楚如何定位要突出显示的特定行。目前整个网格得到突出显示。最终,我希望在新字段的左侧有一个很好的图标来表示该行,但现在突出显示将会执行此操作。无法为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

A $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'

+0

谢谢马特,那很完美。是的,我发现我的拼写错误,当我看到您的答案时我会回来修复它。 – Conor