2010-04-29 23 views
6

Ho un modulo con un DataGridView (di 3 colonne) e un pulsante. Ogni volta che l'utente fa clic su un pulsante, voglio ottenere i valori memorizzati nella prima colonna di quella riga.C#: Seleziona riga da DataGridView

Ecco il codice che ho:

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(); 
      } 
     } 
    } 

Tuttavia quando faccio clic su myButton, il this.ProductsGrid.SelectedRows.Count è 0. Inoltre, come faccio a garantire che l'utente seleziona solo una riga e non più righe? Questo codice sembra corretto?

+1

Non è necessario per scorrere (foreach) su tutte le righe del DataGrid per ottenere solo il primo SelectedRow. Il ciclo di foreach è una perdita di tempo qui. –

risposta

1

SelectedRows restituisce solo le righe se è selezionata l'intera riga (è possibile attivare RowSelect nella vista datagrid se lo si desidera). L'opzione migliore è di andare 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

Beh, non è necessario sia per iterare su tutte le righe nella griglia e accedere alla raccolta di SelectedRows. Se si salta iteratating e usare la collezione SelectedRows, allora il vostro problema è probabilmente un SelectionMode non corretta:

La proprietà SelectionMode deve essere impostata a FullRowSelect o RowHeaderSelect per la proprietà SelectedRows da popolato con le righe selezionate.

(da MSDN)

0

SelectedRows.Count restituisce il numero di righe intere correntemente selezionate. Probabilmente vuoi usare SelectedCells.Count.

1

è possibile fare riferimento la griglia simile a una matrice:

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

Selezionando gli indici dal primo indice del SelectedRowsCollection e SelectedColumnsCollection ti afferra il primo valore se sono selezionate più righe.


È possibile bloccare l'utente a selezionare solo una singola riga impostando la proprietà MultiSelect sul DataGridView. In alternativa si fanno eseguire l'evento CellClick:

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

è anche possibile utilizzare il .BoundItem

Problemi correlati