web-dev-qa-db-fra.com

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

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!

15
Dali

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

21
Javier

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
3
Beep beep

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)

2
Alex Russell

Utilisez simplement les méthodes BindingSource.MoveNext() et BindingSource.MovePrevious().

2
Gan

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
0
sikarnarender

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
0
splattne
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
DrSerhat

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
0
Francisco Cortes

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
0
Mojtaba Rezaeian