2010-08-26 35 views

Respuesta

123

Existe la propiedad RowIndex para la propiedad CurrentCell para DataGridView.

datagridview.CurrentCell.RowIndex 

controlar el evento SelectionChanged y encontrar el índice de la fila seleccionada como anteriormente.

+1

Perfecto. Esto parece más simple/más rápido, incluso sobre SelectedRows [0] .Index. ¿Sería eso una buena suposición? – ErikE

+0

Hmm, no pensé en seleccionar varias filas. No estoy seguro del comportamiento de la celda actual en este caso. – fletcher

+1

Si es algo así como Excel, la lista seleccionada puede ser de muchas filas/columnas, pero solo hay una celda actual/activa. Solo me importa la fila actual, así que esto debería estar bien. – ErikE

6
dataGridView1.SelectedRows[0].Index; 

O si desea utilizar LINQ y obtener el índice de todas las filas seleccionadas, se podría hacer:

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

útil (IndexOf todavía no era realmente "en mi radar"), pero rotonda desde que obtuvo la fila no es necesario. El método .Index es lo que estaba buscando. – ErikE

31

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

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

¿Crees que esto es mejor o DGV.CurrentCell.RowIndex? – ErikE

+4

La celda actual puede no seleccionarse en algunos casos, por lo que esta es la mejor manera de hacerlo. – AbleArcher

+0

@thethuthinnang cuando ha seleccionado ninguna fila, la solución de @JayRiggs lanzará el error de índice dos. Será mejor que lo envuelva con un 'if' –

1

Probar DataGridView.CurrentCellAddress.

Devoluciones: A Punto que representa los índices de filas y columnas de la celda actualmente activa.

E.G. Seleccione la primera columna y la quinta fila, y obtendrá: Punto (X = 1, Y = 5)

+0

P.S. desde que pregunté por el índice de la fila, las cosas habrían sido menos complicadas en nuestra relación si hubiera dicho 'DataGridView.CurrentCellAddress.Y' ... :) – ErikE

+0

Creo que en este punto todas estas respuestas son válidas, simplemente está arriba para usted cuál quiere elegir que sea más limpio para sus propósitos. Sugeriría que escribas las diferentes implementaciones y mires el IL en .NET Reflector (http://www.red-gate.com/products/reflector/) si realmente quieres ver qué código se genera para cada una, pero como muchos dirán, eso es micro-optimización. Realmente se trata de lo que es más claro en la intención. PS Nota tomada para ser más clara en el futuro. – Kilanash

3

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

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

prueba este

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 
} 
+0

Gracias, exactamente lo que necesitaba para determinar el valor oculto de una fila seleccionada al usar un control que no estaba asociado con la vista de cuadrícula. – orgtigger

-1

intente lo siguiente:

int myIndex = MyDataGrid.SelectedIndex; 

Esto le dará al índice de la fila que está seleccionada en ese momento.

Esperanza esto ayuda

0

he modificado respuesta @JayRiggs', y esto funciona. Necesita el if porque a veces las SelectedRows pueden estar vacías, por lo que la operación de índice emitirá una excepción.

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

Puede probar este código:

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

Práctica:

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

espero que le ayudará.

+2

Gracias por saltar, 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

que utilizar si se hace clic en valor de fila get:

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 
} 
Cuestiones relacionadas