selezione cambiamento di programmazione sul DataGridView (NET)


14

sto imparando VB.NET.

Ho un problema con il componente DataGridView quando si cerca di impostare il valore della CurrentCell. Quello che sto cercando di fare è:

Ho un DataGridView Con valori. Voglio fare un pulsante nei miei moduli e quando clicco su di esso voglio cambiare la selezione dalla riga corrente alla successiva. Per spiegare di più, facendo clic sul mio pulsante voglio simulare l'effetto di un clic del mouse su una DataGridview.

Spero che tu possa aiutarmi,

Grazie!

21

Forse qualcosa di simile:

If DataGridView1.RowCount > 0 Then 

     Dim MyDesiredIndex As Integer = 0 

     If DataGridView1.CurrentRow.Index < DataGridView1.RowCount - 1 Then 
      MyDesiredIndex = DataGridView1.CurrentRow.Index + 1 
     End If 

     DataGridView1.ClearSelection()    
     DataGridView1.CurrentCell = DataGridView1.Rows(MyDesiredIndex).Cells(0) 
     DataGridView1.Rows(MyDesiredIndex).Selected = True 

    End If 

Nota 1: forse questi due linee non sono necessarie. I havent dimostrato

 DataGridView1.ClearSelection()    
     DataGridView1.CurrentCell = DataGridView1.Rows(MyDesiredIndex).Cells(0) 

Nota 2: nota che se siamo in ultima fila, si va alla prima


3

È necessario impostare proprietà Selected particolare della riga su true. Credo che il VB sarebbe qualcosa di simile:

someDGV.Rows(index).Selected = True 

0

che si possa fare in questo modo:

If DataGridView1.CurrentRow.Index < DataGridView1.Rows.Count Then 
    DataGridView1.Rows(DataGridView1.CurrentRow.Index + 1).Selected = True 
End If 

2

Se la griglia di dati è associato a un BindingSource, è meglio cambiare la posizione c'è:

Object key = Convert.ToInt32(cdr["WordList"]); 
int itemFound = lexiconNamesBindingSource.Find("ID_Name", key); 
lexiconNamesBindingSource.Position = itemFound; 

... e potrebbe essere necessario per finirlo con:

lexiconNamesBindingSource.ResetBidings(); 

(questo è un vecchio thread, ma ho trovato, in modo che qualcun altro potrebbe rivelarsi utile)

+1

Grazie! Questo ha fatto il trucco per noi, dove le altre risposte no. 22 feb. 122012-02-22 14:18:18


2

Basta usare le BindingSource.MoveNext() e BindingSource.MovePrevious() metodi.


0

Per ottenere la riga selezionata, è necessario utilizzare SelectedRows (0) .Index inspite of CurrentRow. Perché se programmaticaly fare una fila come selezionato, quindi la prossima volta troverete 0 a CurrentRow.Index. Quindi Sarebbe come:

If DataGridView1.SelectedRows(0).Index < DataGridView1.RowCount - 1 Then 
    MyDesiredIndex = DataGridView1.SelectedRows(0).Index + 1 
End If 

DataGridView1.Rows(MyDesiredIndex).Selected = True 

0

espansione sulla risposta di cui sopra che è perfetto considerando che ho trascorso almeno 4 ore loooking per questo. e supponendo che la tua vista datagrid si chiami dgvDevices ...questo codice gestirà l'evento in cui si va outbounce come ci si sposta indietro e in avanti sulla vostre file

Private Sub btnPrev_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrev.Click 
    Try 
     dgvDevices.ClearSelection() 
     Dim currentr As Integer = dgvDevices.CurrentCell.RowIndex 
     dgvDevices.CurrentCell = dgvDevices.Rows(currentr - 1).Cells(0) 
     dgvDevices.Rows(currentr - 1).Selected = True 
    Catch ex As Exception 
     dgvDevices.CurrentCell = dgvDevices.Rows(0).Cells(0) 
     dgvDevices.Rows(0).Selected = True 
    End Try 

End Sub 

Private Sub btnForw_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnForw.Click 
    Try 
     dgvDevices.ClearSelection() 
     Dim currentr As Integer = dgvDevices.CurrentCell.RowIndex 
     dgvDevices.CurrentCell = dgvDevices.Rows(currentr + 1).Cells(0) 
     dgvDevices.Rows(currentr + 1).Selected = True 
    Catch ex As Exception 
     dgvDevices.CurrentCell = dgvDevices.Rows(dgvDevices.RowCount - 1).Cells(0) 
     dgvDevices.Rows(dgvDevices.RowCount - 1).Selected = True 
    End Try 
End Sub 

0

Oltre Javiers risposta corretta, se si sta utilizzando per il vostro BindingSource datagridview allora sarà meglio cambiare elemento selezionato dalla fonte vincolante piuttosto che utilizzando datagridview.CurrentCell:

' Example Definitions 
Dim bsExample As New BindingSource 
Dim dgv As New DataGridView 
dgv.DataSource = bsExample 

' Example code to change current row position 
Dim desiredIndex As Integer = 10 
bsExample.Position = desiredIndex