2009-02-22 19 views
14

Ich lerne VB.NET.Programmgesteuertes Ändern der Auswahl auf DatagridView (.NET)

Ich habe ein Problem mit DataGridView-Komponente beim Versuch, den Wert der CurrentCell festzulegen. Was ich versuche zu tun ist:

Ich habe eine DataGridView mit Werten. Ich möchte eine Schaltfläche in meinen Formularen erstellen und wenn ich darauf klicke, möchte ich die Auswahl von der aktuellen Zeile zur nächsten ändern. Um mehr zu erklären, indem ich auf meine Schaltfläche klicke, möchte ich den Effekt eines Mausklicks auf ein DataGridview simulieren.

Ich hoffe, Sie können mir helfen,

Vielen Dank!

Antwort

21

Vielleicht so etwas wie:

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 

Anmerkung 1: vielleicht diese zwei Zeilen sind nicht notwendig. Ich habe sie bewiesen

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

Anmerkung 2: beachten Sie, dass, wenn wir in der letzten Reihe sind, geht es zum ersten

3

Sie müssen die ausgewählte Eigenschaft der bestimmten Zeile auf true festlegen. Ich denke, die VB so etwas wie dieses würde:

someDGV.Rows(index).Selected = True 
0

Man könnte es auf diese Weise tun:

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

Wenn Ihr Datenraster an eine Binding gebunden ist, ist es besser, ändern Sie die Position dort:

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

... und man braucht es zum Schluss mit:

lexiconNamesBindingSource.ResetBidings(); 

(Dies ist ein alter Thread, aber ich fand es, so jemand anderes diese nützlich finden könnte)

+1

Vielen Dank! Das hat den Trick für uns gemacht, wo die anderen Antworten nicht waren. – David

2

einfach die BindingSource.MoveNext() und BindingSource.MovePrevious() Methoden.

0

Um die ausgewählte Zeile zu erhalten, sollten Sie SelectedRows (0) .Index trotz CurrentRow verwenden. Denn wenn Sie programmatisch eine Zeile als ausgewählt markieren, finden Sie das nächste Mal 0 in CurrentRow.Index. So wäre es wie:

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

DataGridView1.Rows(MyDesiredIndex).Selected = True 
0

auf der Antwort erweitert, über den perfekt bedenken, dass ich mindestens 4 Stunden für dieses loooking ausgegeben. und vorausgesetzt, dass Ihre Datagridview dgvDevices aufgerufen wird ...Dieser Code wird das Ereignis, in dem Sie, wie Sie zurück und nach vorne auf Ihren Reihen

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

Neben Javiers richtige Antwort gehen behandelt outbounce bewegen, wenn Sie BindingSource für Ihre Datagridview mit sind, dann wird es besser sein, ausgewähltes Element zu ändern von der Bindungsquelle und nicht mit 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 
Verwandte Themen