【问题标题】:Index of Currently Selected Row in DataGridViewDataGridView 中当前选定行的索引
【发布时间】:2011-04-04 10:29:02
【问题描述】:

就这么简单。如何获取DataGridView 的当前选定Row 的索引?我不想要 Row 对象,我想要索引 (0 .. n)。

【问题讨论】:

    标签: c# .net winforms datagridview


    【解决方案1】:
    dataGridView1.SelectedRows[0].Index;
    

    或者,如果您想使用 LINQ 并获取所有选定行的索引,您可以这样做:

    dataGridView1.SelectedRows.Select(r => r.Index);
    

    【讨论】:

    • 很有帮助(IndexOf 还没有真正“在我的雷达上”),但是因为没有必要获取行,所以需要回旋处。 .Index 方法正是我想要的。
    【解决方案2】:

    在 DGV 的 SelectedRows 集合中使用 Index 属性:

    int index = yourDGV.SelectedRows[0].Index;
    

    【讨论】:

    • 你觉得这个更好还是DGV.CurrentCell.RowIndex?
    • 当前单元格在某些情况下可能不会被选中,所以这是更好的方法。
    • @thethuthinnang 当你没有选择行时,@JayRiggs 的解决方案会抛出索引错误二。你最好用if 包裹它
    【解决方案3】:

    DataGridView 的CurrentCell 属性有RowIndex 属性。

    datagridview.CurrentCell.RowIndex
    

    如上处理SelectionChanged事件并找到选中行的索引。

    【讨论】:

    • 完美。这似乎最简单/最快,甚至超过 SelectedRows[0].Index。这是一个好的假设吗?
    • 嗯,我没有考虑选择多行。在这种情况下,我不确定当前单元格的行为。
    • 如果是 Excel 之类的,选择的列表可以是多行/多列,但只有一个当前/活动单元格。我只关心当前行,所以这应该没问题。
    • 我知道这篇文章很旧,但它可能对其他人有所帮助:CurrentCell 返回“活动”单元格,这与“选定”不同。即使选择了多行,活动单元格也可能在其他地方,并且只能有一个活动单元格
    • 而且,即使您取消选择数据网格视图中的所有内容,其中一个单元格仍将处于活动状态,因此您不能依赖它为 null 或类似的东西存在未选择任何行。
    【解决方案4】:

    试试DataGridView.CurrentCellAddress

    返回:一个点,表示当前活动单元格的行和列索引。

    例如选中第一列第五行,返回:Point( X=1, Y=5 )

    【讨论】:

    • P.S.既然我要了行索引,如果你说DataGridView.CurrentCellAddress.Y ... :)
    • 我认为在这一点上所有这些答案都是有效的,这取决于你要选择哪个最适合你的目的。我建议输入不同的实现并查看 .NET Reflector (red-gate.com/products/reflector) 中的 IL,如果您真的想查看为每个实现生成了什么代码,但正如许多人所说,这是微优化。这真的取决于最明确的意图。 PS 注意以后会更清楚。
    【解决方案5】:

    试试这个它会工作...它会给你所选行索引的索引...

    int rowindex = dataGridView1.CurrentRow.Index;
    MessageBox.Show(rowindex.ToString());
    

    【讨论】:

      【解决方案6】:
      dataGridView1.SelectedRows[0].Index;
      

      在这里找到所有关于datagridview C# datagridview tutorial

      琳达

      【讨论】:

        【解决方案7】:

        试试这个

        bool flag = dg1.CurrentRow.Selected;
        
        if(flag)
        {
          /// datagridview  row  is  selected in datagridview rowselect selection mode
        
        }
        else
        {
          /// no  row is selected or last empty row is selected
        }
        

        【讨论】:

        • 谢谢,当使用与 gridview 无关的控件时,我需要确定所选行的隐藏值。
        【解决方案8】:

        尝试以下方法:

        int myIndex = MyDataGrid.SelectedIndex;
        

        这将给出当前选择的行的索引。

        希望对你有帮助

        【讨论】:

          【解决方案9】:

          我修改了@JayRiggs 的答案,这很有效。你需要if,因为有时候SelectedRows可能是空的,所以索引操作会抛出异常。

          if (yourDGV.SelectedRows.Count>0){
              int index = yourDGV.SelectedRows[0].Index;
          }
          

          【讨论】:

            【解决方案10】:

            你可以试试这个代码:

            int columnIndex = dataGridView.CurrentCell.ColumnIndex;
            int rowIndex = dataGridView.CurrentCell.RowIndex;
            

            【讨论】:

              【解决方案11】:

              试试看:

              int rc=dgvDataRc.CurrentCell.RowIndex;** //for find the row index number
              MessageBox.Show("Current Row Index is = " + rc.ToString());
              

              希望对你有帮助。

              【讨论】:

              • 感谢您的参与,但您的答案与提供解决方案 datagridview.CurrentCell.RowIndex 的所选(也是最受好评的答案)重复。抱歉,我建议将这篇文章作为完整副本删除。
              【解决方案12】:

              如果点击获取行值,我使用:

              private void dataGridView_Product_CellClick(object sender, DataGridViewCellEventArgs e){
                  int rowIndex;
                  //rowIndex = e.RowIndex; //Option 1
                  //rowIndex= dataGridView_Product.CurrentCell.RowIndex; //Option 2
                  rowIndex = dataGridView_Product.CurrentRow.Index; //Option 3
              }
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2018-11-16
                • 1970-01-01
                • 1970-01-01
                • 2011-02-02
                • 2015-09-19
                相关资源
                最近更新 更多