【问题标题】:Selecting a row in DataGridView programmatically以编程方式在 DataGridView 中选择一行
【发布时间】:2011-09-10 01:11:11
【问题描述】:

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

【问题讨论】:

    标签: c# .net winforms datagridview


    【解决方案1】:

    试试这个:

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

    希望对您有所帮助!

    【讨论】:

      【解决方案2】:

      未测试,但我认为您可以执行以下操作:

      dataGrid.Rows[index].Selected = true;
      

      或者您可以执行以下操作(但同样:未测试):

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

      【讨论】:

      • 请注意,如果您的 DataGridView 是 read-only - 那么 SelectedRows.Clear() 将不起作用。
      • 使用 datagridview 实例的 ClearSelection() 方法代替 SelectedRows.Clear()
      • @Furkan:那不一样。使用SelectedRows.Clear() 只会清除选定的行,但使用ClearSelection() 也会丢失列 => 列选择...
      • 添加一行代码dataGrid.CurrentCell = dataGrid.Rows[row.Index].Cells[0];
      • @Timeless:在测试您的建议时,似乎没有触发 SelectionChanged 事件。
      【解决方案3】:
      DataGridView.Rows
          .OfType<DataGridViewRow>()
           .Where(x => (int)x.Cells["Id"].Value == pId)
           .ToArray<DataGridViewRow>()[0]
           .Selected = true;
      

      【讨论】:

        【解决方案4】:

        试试这个:

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

        【讨论】:

        【解决方案5】:

        在 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) 在网格数据长于网格显示区域的情况下非常有用。上面提到的顺序不是必须的,你可以刷代码选择行/单元格[来源:个人测试]。
        • 如何将网格移动到选定位置?选择了行,但网格位置不在所选行上。手动滚动显示选定的行。如何强制网格滚动?
        • 看到:FirstDisplayedScrollingRowIndex
        • 请注意您在.Cells(x) 中引用的任何列都是Columns(x).Visible = True,否则会出错。使用DataGridView.FirstDisplayed 找到第一个。
        【解决方案6】:
         <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 是要在网格视图中选择的行列表。

        【讨论】:

          【解决方案7】:

          如果您有数据源,则可以使用 Select 方法: http://msdn.microsoft.com/en-us/library/b51xae2y%28v=vs.71%29.aspx

          如果数据源中有对象,则使用 linq

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-10-19
            • 1970-01-01
            • 1970-01-01
            • 2017-01-30
            • 2019-04-10
            相关资源
            最近更新 更多