Se positionner sur une ligne dans un datagridview

Cokby - 2 mars 2020 à 03:41
Whismeril Messages postés 18290 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 mars 2023 - 2 mars 2020 à 15:27
Bonjour
j'ai un datagridview remplit par un dataset. mon souhait est de positionner le curseur en fonction de la première lettre des enregistrements.
c'est a dire lorsque le datagridview a le focus et que je presse la lettre 'M', la sélection se place sur le premier enregistrement commençant par la lettre 'M'
merci d'avance

3 réponses

Whismeril Messages postés 18290 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 mars 2023 622
Modifié le 2 mars 2020 à 15:22
Alors tu peux essayer un truc comme ça
    Private Sub DataGridView1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles DataGridView1.KeyPress
        Dim c As Char = e.KeyChar
        Dim index As Integer = 0

        For Each r As DataRow In SGrT.Rows
            If r.Field(Of String)("Article").StartsWith(c) Then
                DataGridView1.Rows(index).Selected = True
                Exit Sub
            End If
            index += 1
        Next
    End Sub 


Tu peux aussi t'intéresser au binding via l'objet bindingsource https://codes-sources.commentcamarche.net/faq/1291-utilisation-du-binding-au-travers-de-l-objet-databindingsource
Il te faudra écrire une classe métier que tu remplirais avec le datatable, mais ensuite, il suffit d'affecter à la propriété Current du bindingsource le résultat de cette requête Linq
        lesDonnees.FirstOrDefault(Function(x)
                                      Return x.Article.StartWith(c)
                                  End Function)

lesDonnees étant la collection de tes objets métier
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
1
Whismeril Messages postés 18290 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 mars 2023 622
2 mars 2020 à 15:27
PS je me suis permet de modifier ton titre, pour qu'il n'y ait plus d'ambiguïté sur le contrôle
0
Whismeril Messages postés 18290 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 mars 2023 622
2 mars 2020 à 09:13
Bonjour

Tout d’abord gridview et datagridview sont 2 contrôles assez différents.

On va partir du principe que c’est un datagridview, si ça n’est pas le cas, il faudra que tu le précises.
Peux tu poster le code qui le remplit en utilisant la coloration syntaxique (voir ce tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code )
Il faut aussi préciser ce que tu entends par
premier enregistrement commençant par la lettre 'M'
par ce que l’intérêt d’un datagridview est d’afficher des enregistrements avec plusieurs champs. Faut il trouver l’item dont n’importe quel champ commence par M? Ou seulement un champ spécifique?
0
Bonjour,
Vous aviez raison j'ai un datagridview, c'était pour faire la différence avec un datagrid que je l'ai nommé gridview. Merci
Voila comment il est rempli, j'ai environ 97 articles.

 Public Sub ChargerStockGr()
        Try
            Connection()
            Dim Mag As Integer = 1
            Sql = "SELECT ID, Code, Article, Stock, [USell] AS [Prix(U)], Qté, Montant " _
                   + " FROM StockGros WHERE [Stock] >= '" & Mag & "' ORDER BY [Article] ASC"
            Cmd = New OleDb.OleDbCommand(Sql) 
            SGrTA = New OleDb.OleDbDataAdapter(Cmd)
            Cmd.Connection() = GP 
            CDSet = New DataSet 
            SGrTA.Fill(CDSet, "StockGros")
            SGrT = CDSet.Tables("StockGros") 
            Gridview.DataSource = CDSet
            Gridview.DataMember = "StockGros" 
           GridviewStockStyles()
        Catch ex As Exception
        Finally
            GP.Close()
        End Try
    End Sub


Le positionnement se fera sur l'article dont le nom commence par 'M' par exemple dans le champ "Article". Ceci permettra d'aller directement sur les articles commençant par la lettre 'M' avant de sélectionner l'article rechercher
0
Rejoignez-nous