IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

[ADO.NET] Filtrage DataGridView


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 127
    Par défaut [ADO.NET] Filtrage DataGridView
    Bonjour,

    J'ai crée une base donnée GestionCommande et j'ai listé (En vb.net) les enregistrement de tous les client dans une DataGridView...

    Dans un TextBox je veux qu'en saisissant des lettres, la datagrid montre les client dont les noms commence par ce que j'y tape, voici le code



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     Try
                Dim con As New SqlConnection("Server = . ; DataBase = GestionCommande; integrated security = true")
                Dim req As String
                req = "Select * from client where cli_nom like '" & Me.txtFiltre.Text & "%'"
                Dim Cmd As New SqlCommand(req, con)
                con.Open()
                Dim Dr As SqlDataReader
                Dr = Cmd.ExecuteReader
                Dim i As Integer
                i = 0
                If Dr.Read = True Then
                    Me.DataGridView1.Rows.Add()
                    Me.DataGridView1.Item(0, i).Value = Dr(0)
                    Me.DataGridView1.Item(1, i).Value = Dr(1)
                    Me.DataGridView1.Item(2, i).Value = Dr(2)
                    Me.DataGridView1.Item(3, i).Value = Dr(3)
                    Me.DataGridView1.Item(4, i).Value = Dr(4)
                    i = i + 1
                Else
                    (Je ne sais pas quoi faire là :S)
                End If
                con.Close()
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
    Merci de m'aider.

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    et ton code marche tu vois bien tous les clients dans le datagridview ?
    parce que vu le code j'aurais dit que ca affichait que le premier de la table
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre chevronné Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Par défaut
    Bonjour,

    Pol63 a raison, si tu veux utiliser ta méthode, essaye de t'inspirer de l'exemple cité dans cet article :

    http://msdn.microsoft.com/fr-fr/libr...ader.read.aspx

    sinon, essaye de voir comment on utilise le DataSource du DataGridView.

    bonne courage

  4. #4
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 127
    Par défaut
    @Pol63 : Oui tous les enregistrements s'affichent vu que j'ai intégré le code d'affichage dans la form_load mais le filtre dans TextChanged ne marche pas trop bien ...

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    on peut voir le code du form load ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 127
    Par défaut
    Voilà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
      Dim con As New SqlConnection("Server = . ; DataBase = GestionCommande; integrated security = true")
            Dim req As String
            req = "Select * from Client"
            Dim Cmd As New SqlCommand(req, con)
            con.Open()
            Dim Dr As SqlDataReader
            Dr = Cmd.ExecuteReader
            Dim i As Integer
            i = 0
            Do While Dr.Read = True
                Me.DataGridView1.Rows.Add()
                Me.DataGridView1.Item(0, i).Value = Dr(0)
                Me.DataGridView1.Item(1, i).Value = Dr(1)
                Me.DataGridView1.Item(2, i).Value = Dr(2)
                Me.DataGridView1.Item(3, i).Value = Dr(3)
                Me.DataGridView1.Item(4, i).Value = Dr(4)
                i = i + 1
            Loop
            con.Close()

  7. #7
    Membre chevronné Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Par défaut
    Bnj,
    ça étais dis avant, avec le code de ton TextChanged, tu vas afficher juste 1 ligne :

    Citation Envoyé par totoz Voir le message
    Bonjour,
    .......
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     .......
                If Dr.Read = True Then
                    Me.DataGridView1.Rows.Add()
                    Me.DataGridView1.Item(0, i).Value = Dr(0)
                    Me.DataGridView1.Item(1, i).Value = Dr(1)
                    Me.DataGridView1.Item(2, i).Value = Dr(2)
                    Me.DataGridView1.Item(3, i).Value = Dr(3)
                    Me.DataGridView1.Item(4, i).Value = Dr(4)
                    i = i + 1
                Else
                    (Je ne sais pas quoi faire là :S)
                End If
                .........
    t'a essayé avec Do While Dr.Read = True comme t'a fait dans Form Load ? sinon il y a la proprièté FilterExpression qu'on trouve dans ObjectDataSource et SqlDataSource.

  8. #8
    Membre éprouvé
    Inscrit en
    Octobre 2009
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 116
    Par défaut
    Bonsoir redouane
    je crois que j'ai la solution à ton problème

    j'ai le même exemple qui marche très bien mais avec une petite différence car je travaille en mode déconnecté je vais vous laisser ma méthode et tu peux la modifier par rapport tes besoin

    le principe que tu doit à chaque évènement TextChanged tu doit envoyer ta requête à la base de données pour te retourner le résultat



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
        Public Sub RempliDataGrid(ByVal MATABLE As String, ByVal F As Form, ByVal DGV As DataGridView)
            Call FermConx()
            Call OuvreConx()
            Dim REQ, WHEREE, CH As String
            REQ = "SELECT * FROM " & MATABLE & " WHERE"
            WHEREE = " "
            For Each CTL In F.Controls
                If TypeOf CTL Is ComboBox Then
                    If CTL.TEXT = "--Tout Les Villes--" Then
                        'CTL.TEXT = ""
                        'CH = CTL.NAME.SUBSTRING(3)
                        'WHEREE = WHEREE & "CONVERT(VARCHAR," & CH & ",103) LIKE '" & CTL.TEXT & "%' AND "
                        'CTL.TEXT = "--Tout Les Villes--"
                    Else
                        CH = CTL.NAME.SUBSTRING(3)
                        WHEREE = WHEREE & "CONVERT(VARCHAR," & CH & ",103) LIKE '" & CTL.TEXT & "%' AND "
                    End If
                ElseIf TypeOf CTL Is TextBox Then
                    CH = CTL.NAME.SUBSTRING(3)
                    WHEREE = WHEREE & "CONVERT(VARCHAR," & CH & ",103) LIKE '" & CTL.TEXT & "%' AND "
                End If
            Next
            REQ = REQ & WHEREE
            REQ = REQ.Substring(0, Len(REQ) - 4)
     
            CMD.CommandText = REQ
            CMD.Connection = CON
            DA.SelectCommand = CMD
            DS.Tables.Clear()
            DA.Fill(DS, "TABLE")
            DGV.DataSource = DS.Tables("TABLE")
            Call FermConx()
        End Sub

    à la prochaine

  9. #9
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    Citation Envoyé par jimb2k Voir le message
    le principe que tu doit à chaque évènement TextChanged tu doit envoyer ta requête à la base de données pour te retourner le résultat

    pas conseillé du tout non ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Membre éprouvé
    Inscrit en
    Octobre 2009
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 116
    Par défaut
    c'est quoi la bonne solution mr pol36

    et merci d'avance

  11. #11
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Hello,
    personnellement je mettrais ce code dans le load de la form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            Call FermConx()
            Call OuvreConx()
            Dim REQ, WHEREE, CH As String
            REQ = "SELECT * FROM " & MATABLE 
     
            CMD.CommandText = REQ
            CMD.Connection = CON
            DA.SelectCommand = CMD
            DS.Tables.Clear()
            DA.Fill(DS, "TABLE")
            DGV.DataSource = DS.Tables("TABLE")
            Call FermConx()
    puis dans l'évènement TextChanged je ferais un filtre par dtTable.DefaultView.Sort comme expliqué dans ce post qui changera en direct l'affichage en une seul ligne sans multiplier les requêtes sur la base de donnée...
    C'est bien plus propre comme ca...

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/03/2014, 16h44
  2. [Débutant] DataGridView - View SQL (ADO.NET)
    Par Proxy dans le forum C#
    Réponses: 2
    Dernier message: 13/11/2011, 14h34
  3. [VB.NET] [ADO.NET] DataAdapter et concaténation
    Par master56 dans le forum Accès aux données
    Réponses: 3
    Dernier message: 04/06/2004, 13h25
  4. Réponses: 5
    Dernier message: 22/12/2003, 14h18
  5. [IB v7.1][C#][ADO.NET] Démarrer avec IB 71
    Par BoeufBrocoli dans le forum InterBase
    Réponses: 14
    Dernier message: 05/08/2003, 12h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo