Índice de la fila actualmente seleccionada en DataGridView

96

Es así de simple. ¿Cómo consigo el índice del seleccionado Rowde un DataGridView? No quiero el Rowobjeto, quiero el índice (0 .. n).

ErikE
fuente

Respuestas:

165

Existe la RowIndexpropiedad de la CurrentCellpropiedad de DataGridView.

datagridview.CurrentCell.RowIndex

Maneje el SelectionChangedevento y busque el índice de la fila seleccionada como arriba.

fletcher
fuente
1
Perfecto. Esto parece el más simple / rápido, incluso sobre SelectedRows [0] .Index. ¿Sería una buena suposición?
ErikE
Hmm, no pensé en seleccionar varias filas. No estoy seguro del comportamiento de la celda actual en este caso.
fletcher
1
Si es algo parecido a Excel, la lista seleccionada puede tener muchas filas / columnas, pero solo hay una celda actual / activa. Solo me importa la fila actual, así que esto debería funcionar bien.
ErikE
18
Sé que esta publicación es antigua, pero podría ayudar a alguien más: CurrentCelldevuelve la celda "activa", que es diferente de "Seleccionado". Incluso si hay varias filas seleccionadas, la celda activa puede estar en otro lugar y solo puede haber una celda activa
Luke Marlin
3
Y también, incluso si anula la selección de todo en la vista de cuadrícula de datos, una de las celdas seguirá activa, por lo que no puede confiar en que esto sea nulo o algo así para que no haya filas seleccionadas.
Daniel Gray
37

Utilice la propiedad Index en la colección SelectedRows de su DGV:

int index = yourDGV.SelectedRows[0].Index;
Jay Riggs
fuente
¿Crees que esto es mejor o DGV.CurrentCell.RowIndex?
ErikE
4
Es posible que la celda actual no esté seleccionada en algunos casos, por lo que esta es la mejor manera de hacerlo.
Little Endian
1
@thethuthinnang cuando no ha seleccionado ninguna fila, la solución de @JayRiggs arrojará el error de índice dos. Será mejor que lo envuelvas con unif
Allan Ruin
7
dataGridView1.SelectedRows[0].Index;

O si desea usar LINQ y obtener el índice de todas las filas seleccionadas, puede hacer:

dataGridView1.SelectedRows.Select(r => r.Index);
Justin Niessner
fuente
Útil (IndexOf no estaba realmente "en mi radar" todavía), pero indirecto ya que obtener la fila no es necesario. El método .Index es lo que estaba buscando.
ErikE
3

pruebe esto, funcionará ... le dará el índice del índice de fila seleccionado ...

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

prueba esto

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
}
HyperNova
fuente
Gracias, exactamente lo que necesitaba para determinar cuál es el valor oculto de una fila seleccionada al usar un control que no estaba asociado con la vista de cuadrícula.
orgtigger
2

Modifiqué la respuesta de @JayRiggs y esto funciona. Necesita ifporque a veces las SelectedRows pueden estar vacías, por lo que la operación de índice arrojará una excepción.

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

Pruebe DataGridView.CurrentCellAddress .

Devuelve: un punto que representa los índices de fila y columna de la celda actualmente activa.

Por ejemplo, seleccione la primera columna y la quinta fila, y volverá: Punto (X = 1, Y = 5)

Kilanash
fuente
PD: desde que pedí el índice de filas, las cosas hubieran sido menos difíciles en nuestra relación si hubieras dicho DataGridView.CurrentCellAddress.Y... :)
ErikE
Creo que en este punto todas estas respuestas son válidas, depende de usted cuál desea elegir que sea la más limpia para sus propósitos. Sugeriría escribir las diferentes implementaciones y mirar el IL en .NET Reflector ( red-gate.com/products/reflector ) si realmente desea ver qué código se genera para cada una, pero como muchos dirán, eso es micro -mejoramiento. Realmente depende de la intención más clara. PD Nota tomada para ser más clara en el futuro.
Kilanash
1

Intentalo:

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

Espero que te ayude.

Raaz Salyani
fuente
3
Gracias por contribuir, pero su respuesta es un duplicado de la respuesta seleccionada (y la más votada) que dio la solución datagridview.CurrentCell.RowIndex. Mis disculpas, voy a recomendar que esta publicación se elimine como un duplicado completo.
ErikE
0

Puedes probar este código:

int columnIndex = dataGridView.CurrentCell.ColumnIndex;
int rowIndex = dataGridView.CurrentCell.RowIndex;
subhankar
fuente
0

Usé si se hace clic en obtener el valor de la fila:

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
}
Han Nguyen
fuente
-1

Intente lo siguiente:

int myIndex = MyDataGrid.SelectedIndex;

Esto le dará el índice de la fila que está actualmente seleccionada.

Espero que esto ayude

P_Fitz
fuente