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

Windows Forms Discussion :

DataTable lier au DataGridView et filtre


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Décembre 2004
    Messages : 157
    Points : 123
    Points
    123
    Par défaut DataTable lier au DataGridView et filtre
    J'ai une feuille de recherche d'un utilisateur.

    j'aimerais pouvoir onKeyPress filtrer le dataTable par l'edit adéquate, si on presse une touche dans Login on filtre sur la colone login, nom ...

    j'ai pensé à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DataGridView.DataSource = Me.dtTable.Select(TextBox.text)
    mais il semblerait qu'il ne trouve que quand le champ est complet donc y a t'il un caractère de remplacement?

    de plus le tableau de row ne passe pas aussi bien qu'un dataTable

  2. #2
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 777
    Points
    1 777
    Par défaut
    Bonjour.

    Il y a quoi dans TextBox.text ? En fait le select attend la clause "where" que tu coderais dans un select sql classique.

    Du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DataGridView.DataSource = Me.dtTable.Select("MonLogin = '" & TextBox.text & "'")
    Cdt.

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Décembre 2004
    Messages : 157
    Points : 123
    Points
    123
    Par défaut
    Oui desolé j'ai mal recopier en effet.

    Il y a deux problème avec ça c'est que le vecteur de DataRow ne passe pas.
    et quand je fais ça, il faut par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.dtTable.Select("MonLogin = 'matrix_ceg'")
    passera bien mais j'ai besoin de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.dtTable.Select("MonLogin = 'matr'")
    qui me donne une liste avec tout les log commençant par matr...

    dans toute la doc que je trouve sur les selects c'est Fields = ...

    comment faire un et ou ... caratère de remplacement? je ne trouve rien

    Je pense que se serait stupide de refaire un select sur db alors qu'on a toutes les infos dans le dataset.

    En français ... en SQL plutot je veux faire ça sans aller dans la db mais sur le dataset.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT * FROM Users WHERE Login like""" & textBox.Text & "%"""

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 374
    Points : 451
    Points
    451
    Par défaut
    Bonjour,
    Essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.dtTable.Select("MonLogin like 'matr%'")
    Jean

  5. #5
    Membre actif

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 291
    Points : 270
    Points
    270
    Par défaut
    Bonjour,

    Il me semble que pour filtrer une DataTable, le mieux est d'utiliser un DataView.
    1. Tu charges ta table "Tbl_1" dans un DataSet "objDataSet"
    2. Tu charges dans le DataGridView "Dgv_1" de ton formulaire ta table "Tbl_1"
      Sur ce que j'ai compris, jusqu'ici tu n'as pas de soucis....
    3. Tu créés un DataView "objDataView", une vue filtée de ta DataTable

    Code Vb.net : 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
     
    Dim objDataView As New DataView
    Dim strChampASCDESC as String
    Dim strFiltre As String
     
    ' Remplir tes options de trie
    strChampASCDESC = "NomDeLaColonne1 ASC"
    strFiltre = "NomDeLaConne1 = *'" & TaTextBox.Text & "'*"
     
    With objDataView
          ' Charger la table dans le DataView
          .Table = objDataSet.Tables("TblVehicule")
          ' Ordre du trie de la vue filtrée, type string.
          ' ASC" ASC = Trie croissant, DESC Trie décroissant
          .Sort = strChampASCDESC
          ' Trie de la vue filtrée, type string.
          .RowFilter = strFiltre
    End With
     
    Me.Dgv_1.DataSource = objDataView

    Si tu as besoin de ce type de recherche sur plusieurs formulaires, je te conseil de faire une fonction qui te retournea un DataView.
    Code Vb.Net : 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
     
    Public Function fctRecherche(ByVal objDataSet as DataSet, ByVal strNomTable as String, ByVal strChampASCDESC as String, ByVal strFiltre as String)
     
    Dim objDataView As New DataView
     
    With objDataView
          ' Charger la table dans le DataView
          .Table = objDataSet.Tables(strNomTable )
          ' Ordre du trie de la vue filtrée, type string.
          ' ASC" ASC = Trie croissant, DESC Trie décroissant
          .Sort = strChampASCDESC
          ' Trie de la vue filtrée, type string.
          .RowFilter = strFiltre
    End With
     
    return objDataView
    Et dans tes formulaires
    Code Vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Me.Dgv_1.DataSource = fctRecherche(.... Les arguments ..)

    Bonne continuation

    Gwendal

  6. #6
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Décembre 2004
    Messages : 157
    Points : 123
    Points
    123
    Par défaut
    Merci beaucoup

    Désolé de ne pas répondre plus tôt mais un autre boulot prioritaire.

    Je teste dès que je peux.

    a bientot.

  7. #7
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 285
    Points : 99
    Points
    99
    Par défaut
    Bonjour,

    Je viens vers vous pour 2 questions sur le code ci-dessus :

    - Est-il possible de cumuler plusieurs filtres ? Si oui, comment ? (ça fait 2 jours que je suis sur ce point qui va être tout bête pour certains d’entre-vous.)
    - Quand j’appelle la fonction fctRecherche, je ne vois pas quoi mettre comme dataset. Dans l’exemple, je ne vois pas où se trouve le dataset ou comment le créer.

    Je viens d’access et me mets à vb.net et son fonctionnement, ses objets. Merci d’avance de votre patience.

  8. #8
    Membre actif

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 291
    Points : 270
    Points
    270
    Par défaut
    Salut,

    J'ai le même parcours! L'avantage s'est qu'avec Vb.net tu n'a pas besoin d'Access d'installé sur le poste pour faire tourner une base !

    Pour ton soucis; Admettons
    1- Dans ta base, une table TblRepertoire avec Nom, Prenom, ...
    2- Dans ton formulaire, un datagridview, 2 zones de texte, un bouton
    3- Dans ton formulaire, déclare en variable un dataset (ex.: objDataSet)
    4- Dans ton formulaire, charge une table TblRepertoire dans ton dataset
    5- Dans ton formulaire, place le code suivant:
    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
     
    Public Function fctRecherche(ByVal objDataSet as DataSet, ByVal strNomTable as String, ByVal strChampASCDESC as String, ByVal strFiltre as String)
     
    Dim objDataView As New DataView
     
    With objDataView
          ' Charger la table dans le DataView
          .Table = objDataSet.Tables(strNomTable )
          ' Ordre du trie de la vue filtrée, type string.
          ' ASC" ASC = Trie croissant, DESC Trie décroissant
          .Sort = strChampASCDESC
          ' Trie de la vue filtrée, type string.
          .RowFilter = strFiltre
    End With
     
    return objDataView
     
    End Function
    6- Sur le bouton, place le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Me.Dgv_1.DataSource = fctRecherche(objDataSet, "TblRepertoire", "Nom ASC", "WHERE TblRepertoire.Ville = """ & Me.TextBox1.text & """ AND TblRepertoire.Sexe = """ & Me.TextBox2.text & """)
    Voilà...

    Gdal

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2007
    Messages : 56
    Points : 35
    Points
    35
    Par défaut
    Salut Gdal. Je veux utiliser ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
            Me.Dgv1.DataSource = fctRecherche(EssaiDataSet, "TblRepertoire", "Nom ASC", "WHERE TblRepertoire.Ville = '" & Me.TextBox1.Text & """ And TblRepertoire.Sexe = """ & Me.TextBox2.Text & """")
        End Sub
    mais lorsque je clique sur le bouton, il me produit l'erreur suivante au niveau de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objDataView.RowFilter = strFiltre
    Erreur de syntaxe : opérande manquant après l'opérateur 'TblRepertoire'.

  10. #10
    Membre actif

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 291
    Points : 270
    Points
    270
    Par défaut
    re,

    J'ai peut-être fait une erreur: essai sans le WHERE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
            Me.Dgv1.DataSource = fctRecherche(EssaiDataSet, "TblRepertoire", "Nom ASC", "blRepertoire.Ville = '" & Me.TextBox1.Text & """ And TblRepertoire.Sexe = """ & Me.TextBox2.Text & """")
        End Sub
    Tu places un point d'arrêt sur la ligne qui pose problème
    Tu regardes dans ton dataset si la table que tu charges porte bien le bon nom; le colonne....

    @+

    Gdal

Discussions similaires

  1. [VB.net] Modification DataTable par un DataGridView
    Par nico10gbb dans le forum Windows Forms
    Réponses: 11
    Dernier message: 05/10/2009, 17h38
  2. Lier 2 datagridview
    Par droliprane dans le forum VB.NET
    Réponses: 8
    Dernier message: 27/08/2008, 13h27
  3. lier deux feuilles avec filtre
    Par kroukse dans le forum Excel
    Réponses: 7
    Dernier message: 21/05/2008, 14h58
  4. (debutant) lier 2 datagridview
    Par felin86 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 13/03/2008, 21h38
  5. [C#]Datagridview : Tri / Filtre
    Par Theka dans le forum Windows Forms
    Réponses: 19
    Dernier message: 24/07/2006, 17h53

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