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!

15
demandé sur C-Pound Guru 2009-02-22 17:48:26

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

21
répondu Javier 2009-02-22 15:22:47

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
3
répondu Beep beep 2009-02-22 14:55:48

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)

2
répondu Alex Russell 2012-10-29 21:35:26

BindingSource.MoveNext() et BindingSource.MovePrevious() méthodes.

2
répondu Gan 2016-03-17 00:51:45

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
0
répondu splattne 2009-02-22 15:09:04

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
0
répondu sikarnarender 2013-09-10 00:26:37

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
0
répondu Francisco Cortes 2015-04-18 06:08:12

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
0
répondu Mojtaba Rezaeian 2016-03-17 01:02:22
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
0
répondu DrSerhat 2018-06-03 01:47:28