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 souhaite créer un bouton dans mes formulaires et, en cliquant dessus, je souhaite modifier la sélection de la ligne actuelle à la suivante. 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 m'aider,
Merci!
Peut-être quelque chose comme ça:
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 ne l'ai pas prouvé
DataGridView1.ClearSelection()
DataGridView1.CurrentCell = DataGridView1.Rows(MyDesiredIndex).Cells(0)
Note 2: notez que si nous sommes dans la dernière ligne, ça va en premier
Vous devez définir la propriété Selected de la ligne en question sur true. Je pense que le VB ressemblerait à ceci:
someDGV.Rows(index).Selected = True
Si votre grille de données est liée à un BindingSource, il est préférable de changer la position à cet endroit:
Object key = Convert.ToInt32(cdr["WordList"]);
int itemFound = lexiconNamesBindingSource.Find("ID_Name", key);
lexiconNamesBindingSource.Position = itemFound;
... et vous devrez peut-être finir avec:
lexiconNamesBindingSource.ResetBidings();
(Ceci est un vieux fil, mais je l'ai trouvé, donc quelqu'un d'autre pourrait le trouver utile)
Utilisez simplement les méthodes BindingSource.MoveNext()
et BindingSource.MovePrevious()
.
Pour obtenir la ligne sélectionnée, vous devez utiliser SelectedRows (0) .Index inspite de CurrentRow. Parce que si vous créez par programme une ligne telle que sélectionnée, la prochaine fois, vous trouverez 0 dans CurrentRow.Index . Donc, ce serait comme:
If DataGridView1.SelectedRows(0).Index < DataGridView1.RowCount - 1 Then
MyDesiredIndex = DataGridView1.SelectedRows(0).Index + 1
End If
DataGridView1.Rows(MyDesiredIndex).Selected = True
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
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
développant la réponse ci-dessus, ce qui est parfait étant donné que j'ai passé au moins 4 heures à rechercher ce sujet. et à supposer que votre datagridview s'appelle dgvDevices ... ce code gérera l'événement dans lequel vous allez rebondir à mesure que vous revenez. et avancez 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
Outre la réponse correcte de Javiers, si vous utilisez BindingSource pour votre datagridview, il sera préférable de modifier l'élément sélectionné 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