PowerShell:选择DataGridView行

3
到目前为止,我有这段代码。
$form = New-Object System.Windows.Forms.Form
$form.Size = New-Object System.Drawing.Size(900,600)
$dataGridView = New-Object System.Windows.Forms.DataGridView
$dataGridView.Size=New-Object System.Drawing.Size(800,400)
$go = New-Object System.Windows.Forms.Button
$go.Location = New-Object System.Drawing.Size(300,450)
$go.Size = New-Object System.Drawing.Size(75,23)
$go.text = "Select"
$form.Controls.Add($go)
$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
}

$go.Add_Click({
    $selectedRow = $dataGridView.CurrentRowIndex
write-host $selectedRow
})

[void]$form.ShowDialog() 

它只是获取进程名称、ID等属性,并将它们放入预定义的标题中,然后在DataGridView中显示。

我的问题是,我希望通过$selectedRow = $dataGridView.CurrentRowIndex查看我点击的行,并将其输出到控制台。然而,当点击“选择”按钮时,终端输出一个空字符串。

2个回答

7

您也可以通过以下方式获取行索引:

$dataGridView.CurrentCell.RowIndex

或者

$dataGridView.SelectedRows[0].Index

您可能还希望将网格的MultiSelect属性设置为$false。目前,它允许选择多行。另一个需要考虑的是将SelectionMode属性设置为“FullRowSelect”。当填充网格时,选中的是第一列而不是整个行。


谢谢Shay。我应该在帖子中提到我真正想要的是所选行的数据(在这种情况下是进程ID)。怎么做才能实现这一点? - obious
1
$dataGridView.CurrentRow.Cells['id'].Value - Shay Levy
最后一个问题。是否可以选择多行?类似这样 - $dataGridView.selectedrows.Cells['id'].Value - obious
是的:$dataGridView.SelectedRows | Foreach { write-host $dataGridView.Rows[$_.Index].Cells['Id'].Value} - Shay Levy
抱歉,Shay,它对我似乎不起作用。你试过了吗? - obious
是的,我确实尝试过,使用您的原始代码。我更新了Add_Click处理程序代码,运行它,选择了几行并点击了选择按钮。所有相关的ID都被写入了主机。 - Shay Levy

2
改变
$selectedRow = $dataGridView.CurrentRowIndex 

为了

$selectedRow = $dataGridView.CurrentRow.Index

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接