以编程方式在DataGridView中选择一行

140

如何在运行时以编程方式选择DataGridView中的特定行范围?

7个回答

176

没有经过测试,但我认为你可以这样做:

dataGrid.Rows[index].Selected = true;

或者你可以按照以下方式操作(但是再次强调:未经测试):

dataGrid.SelectedRows.Clear();
foreach(DataGridViewRow row in dataGrid.Rows)
{
    if(YOUR CONDITION)
       row.Selected = true;
}

2
请注意,如果您的DataGridView是“只读”的,则SelectedRows.Clear()将无法正常工作。 - Derek W
20
请使用 datagridview 实例的 ClearSelection() 方法,而不是 SelectedRows.Clear()。 - Furkan
2
@Furkan:这两个方法的作用不同。使用SelectedRows.Clear()只会清除选定的行,但是使用ClearSelection()也会清除列=>列选择也会丢失... - Christoph Fink
26
增加一行代码:dataGrid.CurrentCell = dataGrid.Rows[row.Index].Cells[0]; - Timeless
2
@Timeless:测试你的建议时,SelectionChanged事件似乎没有被触发。 - user2430797
显示剩余3条评论

50

在Visual Basic中,要选择一个DataGridView中的一行,请执行以下操作;所选行将以突出显示的颜色出现,但请注意,光标位置不会改变:

在Visual Basic中,要选择DataGridView中的一行,请执行以下操作;所选行将以突出显示的颜色出现,但请注意,光标位置不会改变:

Grid.Rows(0).Selected = True

这会改变光标的位置吗:

Grid.CurrentCell = Grid.Rows(0).Cells(0)

将上述行合并将定位光标并选择一行。这是在 DataGridView 中聚焦和选择一行的标准过程:

Grid.CurrentCell = Grid.Rows(0).Cells(0)
Grid.Rows(0).Selected = True

Grid.Rows(0).Cells(0)在网格数据超出网格显示区域的情况下非常有用。上述顺序并不是必要的,您可以滑动代码以选择行/单元格[来源:个人测试]。 - BiLaL
如何将网格移动到所选位置?已选择行,但网格位置不在所选行上。手动滚动可显示所选行。如何强制网格滚动? - FrenkyB
2
请注意:FirstDisplayedScrollingRowIndex - Rodrigo T.
请注意,在.Cells(x)中引用的任何列都必须是Columns(x).Visible = True,否则会出错。 使用DataGridView.FirstDisplayed查找第一项。 - ourmandave

16
DataGridView.Rows
    .OfType<DataGridViewRow>()
     .Where(x => (int)x.Cells["Id"].Value == pId)
     .ToArray<DataGridViewRow>()[0]
     .Selected = true;

0

试一下这个:

datagridview.Rows[currentRow].Cells[0];

1
datagridview.Rows[currentRow].Cells[0] 获取提供的索引位置处的单元格。但是,这如何选择所请求的特定行范围呢? - dbc

0
 <GridViewName>.ClearSelection(); ----------------------------------------------------1
 foreach(var item in itemList) -------------------------------------------------------2
 {
    rowHandle =<GridViewName>.LocateByValue("UniqueProperty_Name", item.unique_id );--3
    if (rowHandle != GridControl.InvalidRowHandle)------------------------------------4
    {
        <GridViewName>.SelectRow(rowHandle);------------------------------------ -----5
    }
  }
  1. 清除所有先前的选择。
  2. 循环遍历您的网格中需要选择的行。
  3. 从网格中获取它们的行句柄(注意,此处网格已更新为新行)
  4. 检查行句柄是否有效。
  5. 当行句柄有效时,则选择它。

其中itemList是要在网格视图中选择的行的列表。


-1

-4

试试这个:

DataGridViewRow row = dataGridView1.Rows[index row you want];
dataGridView1.CurrentRow = row;

希望这有所帮助!

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