Modification programmatique de la sélection sur DatagridView (.NET)
j'apprends VB.NET.
j'ai un problème avec le composant DataGridView quand j'essaie de définir la valeur de CurrentCell. Ce que j'essaie de faire c'est :
j'ai un DataGridView avec des valeurs. Je veux faire un bouton dans mes formulaires et en cliquant dessus je veux changer la sélection de la ligne actuelle à la prochaine. Pour en savoir 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 aider moi,
Merci!
9 réponses
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 que ces deux lignes ne sont pas nécessaires. Je n'ai pas prouvé
DataGridView1.ClearSelection()
DataGridView1.CurrentCell = DataGridView1.Rows(MyDesiredIndex).Cells(0)
Note 2: note que si nous sommes dans la dernière ligne, il va d'abord
vous devez définir la propriété sélectionnée de la ligne particulière à true. Je pense que le VB serait quelque chose comme ceci:
someDGV.Rows(index).Selected = True
si votre grille de données est liée à une source de BindingSource, il est préférable d'y changer la position:
Object key = Convert.ToInt32(cdr["WordList"]);
int itemFound = lexiconNamesBindingSource.Find("ID_Name", key);
lexiconNamesBindingSource.Position = itemFound;
...et vous pourriez avoir besoin pour terminer le tout avec:
lexiconNamesBindingSource.ResetBidings();
(C'est un vieux thread, mais je l'ai trouvé, quelqu'un d'autre pourrait trouver cela utile)
BindingSource.MoveNext()
et BindingSource.MovePrevious()
méthodes.
Vous pourriez faire de cette façon:
If DataGridView1.CurrentRow.Index < DataGridView1.Rows.Count Then
DataGridView1.Rows(DataGridView1.CurrentRow.Index + 1).Selected = True
End If
Pour obtenir la ligne sélectionnée, vous devez utiliser SelectedRows (0).Index en dépit de CurrentRow. Parce que si vous programmaticaly faire une ligne comme sélectionné, alors la prochaine fois vous trouverez 0 dans CurrentRow.Index. Il serait donc de la forme :
If DataGridView1.SelectedRows(0).Index < DataGridView1.RowCount - 1 Then
MyDesiredIndex = DataGridView1.SelectedRows(0).Index + 1
End If
DataGridView1.Rows(MyDesiredIndex).Selected = True
développer la réponse ci-dessus qui est parfaite considérant que j'ai passé au moins 4 heures à chercher pour cela. et en supposant que votre datagridview s'appelle dgvDevices... ce code va gérer l'événement dans lequel vous allez surclasser que vous vous déplacez en arrière et en 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
en outre Javiers réponse correcte, Si vous utilisez BindingSource pour votre datagridview, il sera alors 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
Private Sub DGW2_DataBindingComplete(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewBindingCompleteEventArgs) Handles DGW2.DataBindingComplete
Dim mygrid As DataGridView
mygrid = CType(sender, DataGridView)
mygrid.ClearSelection()
End Sub