Modifier la sélection par programme sur DatagridView (.NET)


14

J'apprends VB.NET.

J'ai un problème avec le composant DataGridView lorsque j'essaie de définir la valeur de CurrentCell. Ce que j'essaie de faire est:

J'ai un DataGridView Avec des valeurs. Je veux faire un bouton dans mes formulaires et lorsque je clique dessus, je veux changer la sélection de la ligne en cours à la suivante. Pour expliquer plus, en cliquant sur mon bouton, je veux simuler l'effet d'un clic de souris sur un DataGridview.

J'espère que vous pouvez me aider,

Merci!

21

Peut-être quelque chose comme ceci:

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 

Note 1: peut-être ces deux lignes ne sont pas nécessaires. Je havent prouvé

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

Note 2: noter que si nous sommes dans la dernière ligne, il va d'abord


3

Vous devez définir la propriété Selected de la ligne particulière sur true. Je pense que le VB serait quelque chose comme ceci:

someDGV.Rows(index).Selected = True 

0

Vous pouvez le faire de cette façon:

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

2

Si votre grille de données est liée à un BindingSource, il vaut mieux changer la position là:

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

... et vous pourriez avoir besoin de finir avec:

lexiconNamesBindingSource.ResetBidings(); 

(Ceci est un vieux fil, mais je l'ai trouvé, pour que quelqu'un d'autre pourrait trouver ce utile)

+1

Merci! Cela a fait l'affaire pour nous, où les autres réponses n'ont pas. 22 févr.. 122012-02-22 14:18:18


2

Il suffit d'utiliser les méthodes BindingSource.MoveNext() et BindingSource.MovePrevious().


0

Pour obtenir la ligne sélectionnée, vous devez utiliser SelectedRows (0) .Index en dépit de CurrentRow. Parce que si vous programmez une ligne comme sélectionnée, la prochaine fois vous trouverez 0 dans CurrentRow.Index. Il serait donc comme:

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

DataGridView1.Rows(MyDesiredIndex).Selected = True 

0

sur la réponse en expansion au-dessus de ce qui est parfait étant donné que j'ai passé au moins 4 heures loooking pour cela. et en supposant que votre datagridview est appelée dgvDevices ...ce code gère l'événement dans lequel vous allez outbounce que vous vous déplacez en arrière et vers l'avant sur vos lignes

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

Outre Javiers réponse, si vous utilisez BindingSource pour votre datagridview alors il sera préférable de changer l'élément sélectionné à partir de la source de liaison plutôt que d'utiliser 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