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 :

filtre datagridview rempli par csv


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 48
    Par défaut filtre datagridview rempli par csv
    Bonjour a tous,

    je tourne un peu en rond...

    j'aimerais une piste pour filtrer un datagridview par le texte sélectionné dans un combobox déclenché par un bouton. le tableau est au préalable rempli par une base CSV (pour raison de compatibillitée des // postes de travail).

    j'ai cherché mais tout ce que j'ai trouvé c'est par BDD, moi c'est un fichier CSV qui sera stocké sur un serveur.

    ci-dessous le code :

    appel de la fonction import:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     import.ImportDonnees("D:\fichier choix moteur\BASE DONNEE.csv")
    remplissage des données dans le tableau:
    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
    34
    35
    36
    37
     
    Imports System.IO
     
    Module import
        Public Sub ImportDonnees(ByVal StrFile As String)
     
            Dim sr As StreamReader = New StreamReader(StrFile, System.Text.Encoding.Default)
     
            Dim Str As String
            Dim Cpt As Integer = 0
            Dim Delim As Char = ";"
            Dim SubChaine() As String
            Dim NbLine, NbCol As Long
            Form1.DataGridView1.Rows.Clear()
            Do Until sr.Peek = -1
                Str = sr.ReadLine()
     
                'Nbre Colonnes
                If Cpt = 0 Then
                    For A As Integer = 1 To Len(Str)
                        If Mid(Str, A, 1) = Delim Then
                            NbCol += 1
                            System.Windows.Forms.Application.DoEvents()
                        End If
                    Next A
                    Form1.DataGridView1.ColumnCount = NbCol + 1
                    Cpt = 1
                End If
     
                'Remplir DataGridView
                SubChaine = Str.Split(Delim)            
                Form1.DataGridView1.Rows.Add(SubChaine)
                System.Windows.Forms.Application.DoEvents()
                NbLine += 1
            Loop
        End Sub
    End Module

    Merci de votre aide.

  2. #2
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Plutot que remplir directement le dataGridView, je conseillerais de remplir une DataTable et de la binder au DataGridView via un BindingSource.

    Ensuite, il suffit de définir le filtre dans la propriété filter du BindingSource, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    bindingSource1.Filter = 
     "Mon_Nom_de_ChampTexte" + "=" + "'" + MyListBox.Text + "'" ;
    PS: les DoEvents() ne servent à priori à rien.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 48
    Par défaut
    Merci graffito pour la piste

    aie aie, c'est justement ce que je voulais éviter...


    Je conseillerais de remplir une DataTable et de la binder au DataGridView via uin binding source.
    donc le mieux est d'importer dans datatable au lieu datagridview, puis lier datatable avec datagridview, enfin filtrer la liaison.
    est-ce j'ai tout compris ?

    petite question quand même, la datatable reste en local (sur le poste) et n'a pas besoin de biblio spécifiques ?
    c'est que l'ensemble des postes est administré de manière anarchique, je voudrais pas avoir de nouveau des problèmes d'erreurs.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 48
    Par défaut
    bon voila où j'en suis :

    recup du csv dans datatable ---> ok

    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
    Imports System.IO
     
    Module importCSV
        Function ReadCSV(ByVal path As String,ByVal nom As String) As System.Data.DataTable
            Dim sr As New StreamReader(path)
            Dim fullFileStr As String = sr.ReadToEnd()
            sr.Close()
            sr.Dispose()
            Dim lines As String() = fullFileStr.Split(ControlChars.Lf)
            Dim recs As New DataTable(nom)
            Dim sArr As String() = lines(0).Split(";"c)
            For Each s As String In sArr
                recs.Columns.Add(New DataColumn())
            Next
            Dim row As DataRow
            Dim finalLine As String = ""
            For Each line As String In lines
                row = recs.NewRow()
                finalLine = line.Replace(Convert.ToString(ControlChars.Cr), "")
                row.ItemArray = finalLine.Split(";"c)
                recs.Rows.Add(row)
            Next
            Return recs
        End Function
    End Module
    ma table s'appelle "table1" , je comprend pas comment binder au datagridview .

    mon code qui marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     importCSV.ReadCSV("D:\fichier choix moteur\BASE DONNEE.csv","table1")
            Dim liaison As New BindingSource("je sais pas quoi mettre", "table1")
            DataGridView1.DataSource = liaison
            'Binding.Filter = "TENSION" + "=" + "'" + ComboBox2.Text + "'"
    je suis allez voir sur msdn, mais j'ai rien compris.

    une pt'ite piste ???

    merci d'avance.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 48
    Par défaut
    je nage complètement...

    pourriez-vous m'aider à faire la relation entre le DATATABLE et le DATAGRIDVIEW.

    merci d'avance.

  6. #6
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Créer une instance de Dataset et y ajouter la datatable.
    Le Datasource est le Dataset et le dataMember le DataTable.

    Et si ce n'est pas le mode par dédfaut, faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    datagridview1.AutoGenerateColumns = True

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/03/2007, 19h08
  2. $_SESSION rempli par un foreach()
    Par novices dans le forum Langage
    Réponses: 5
    Dernier message: 27/07/2006, 14h39
  3. onchange d'une zone remplie par programmation
    Par japz dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 30/05/2006, 13h58
  4. [MySQL] Tableau rempli par une BDD
    Par xender dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 17/05/2006, 11h58
  5. [VB.Net 2.0][DatagridView]Valeur par defaut pour cellule ?
    Par pat59 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 16/03/2006, 15h08

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