DataGridView 中当前选定行的索引
Posted
技术标签:
【中文标题】DataGridView 中当前选定行的索引【英文标题】:Index of Currently Selected Row in DataGridView 【发布时间】:2011-04-04 10:29:02 【问题描述】:就这么简单。如何获取DataGridView
的当前选定Row
的索引?我不想要 Row
对象,我想要索引 (0 .. n)。
【问题讨论】:
【参考方案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
【讨论】:
以上是关于DataGridView 中当前选定行的索引的主要内容,如果未能解决你的问题,请参考以下文章
如何取消选择 DataGridView 控件中的所有选定行?