2010-04-29 98 views
6

Tengo un formulario con un DataGridView (de 3 columnas) y un botón. Cada vez que el usuario hace clic en un botón, quiero obtener los valores almacenados en la primera columna de esa fila.C#: Seleccionar fila de DataGridView

Aquí está el código que tengo:

private void myButton_Click(object sender, EventArgs e) 
    { 
     foreach (DataGridViewRow row in ProductsGrid.Rows) 
     { 
      if (this.ProductsGrid.SelectedRows.Count == 1) 
      { 
      // get information of 1st column from the row 
      string value = this.ProductsGrid.SelectedRows[0].Cells[0].ToString(); 
      } 
     } 
    } 

Sin embargo, cuando hago clic en myButton, la this.ProductsGrid.SelectedRows.Count es 0. Además, ¿cómo me aseguro de que el usuario selecciona una sola fila y no múltiples filas? ¿Este código se ve bien?

+1

No es necesario iterar (foreach) sobre todas las filas de la cuadrícula de datos para obtener sólo la primera SelectedRow. El ciclo foreach es una pérdida de tiempo aquí. –

Respuesta

1

SelectedRows solo devuelve las filas si se selecciona toda la fila (puede activar RowSelect en la vista de tabla de datos si lo desea). La mejor opción es ir con SelectedCells

private void myButton_Click(object sender, EventArgs e) 
{ 
    var cell = this.ProductsGrid.SelectedCells[0]; 
    var row = this.ProductsGrid.Rows[cell.RowIndex]; 
    string value = row.Cells[0].Value.ToString(); 
} 
1

Bueno, no es necesario tanto para iterar sobre todas las filas de la cuadrícula y tener acceso a la colección de SelectedRows. Si se salta iteratating y usar la colección de SelectedRows, entonces su problema es probablemente un SelectionMode incorrecto:

La propiedad SelectionMode debe ajustarse a FullRowSelect o RowHeaderSelect para la propiedad SelectedRows ser poblada de las filas seleccionadas.

(de MSDN)

0

SelectedRows.Count devuelve el número de filas enteras que están seleccionados actualmente. Probablemente quiera usar SelectedCells.Count.

1

puede hacer referencia a la parrilla similar a una matriz:

ProductsGrid[ProductsGrid.SelectedColumns[0].Index, ProductsGrid.SelectedRows[0].Index].Value; 

Mediante la selección de los índices del primer índice de la SelectedRowsCollection y SelectedColumnsCollection podrás agarrar el primer valor si se seleccionan varias filas.


Puede bloquear al usuario seleccionar una única fila estableciendo la propiedad MultiSelect en el DataGridView. De forma alternativa de realizar el evento CellClick realizar:

ProductsGrid.ClearSelection(); 
ProductsGrid.Rows[e.RowIndex].Selected = true; 
0

también se puede utilizar el .BoundItem

Cuestiones relacionadas