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 :

[VB.Net 2.0] [Débutant] Utilisation de Base de donnée texte et DatagridView


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 79
    Points : 57
    Points
    57
    Par défaut [VB.Net 2.0] [Débutant] Utilisation de Base de donnée texte et DatagridView
    J'ai un fichier texte que je voudrais utiliser comme base de donnée (en fait c'est pas toujours le même fichier texte, et oui c'est absolument nécessaire que ce soit en format texte)

    Donc, je voudrais l'ouvrir et le lier à un datagridview, et également le lier à un graphique.

    Voici ce que où j'en suis avec mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            Dim conn As New OdbcConnection
            conn.ConnectionString = "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
                                  "Dbq=c:\;" & _
                                  "extensions=txt,*."
            conn.Open()
     
            Dim da As New OdbcDataAdapter("select * from " & filename, conn)
            Dim ds As New System.Data.DataSet()
            da.Fill(ds, "TT")
            DataGridView1.DataSource = ds.Tables("TT")
            DataGridView1.Update()
            conn.Close()
    Mon datagrid "semble" se remplir car mon fichier test a 30 lignes et après exécution du code, mon datagrid augmente au même nombre de lignes, par contre toutes les cases sont vides...

    Pour l'instant mon fichier texte et sous ce format:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    0.0 TAB 1.1
    0.2 TAB 2.2
    0.3 TAB 3.3
    Soit deux colonnes de chiffres (sans en-tête) séparées par une tabulation.

    qq'un peut m'aider à m'orienter un peu? Merci!

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 238
    Points : 269
    Points
    269
    Par défaut
    Il faut que tu te renseigne sur le Driver. Comment fait le systeme pour connaitre le charactere de séparation entre les champs ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 324
    Points : 343
    Points
    343
    Par défaut
    C'est pas une "base de données" au sens fichier, donc le mieux c'est d'utiliser un Streamreader et de le recuperer tes valeur sous forme de tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    String Path = "C:\\Res\\BDD.txt";
    private List<String[]> Tab2Dim_Fichier = new List<String[]>();
    StreamReader My_sr = new StreamReader(Path, true); 
    String str = My_sr.ReadLine();
    for (; str != null; str = My_sr.ReadLine())
    {
        Tab2Dim_Fichier.Add(str.Split('    ')); // ici entre '    ' tu met une TAB
    }
    My_sr.Close();
    A cet endroit là ton tableau (Tab2Dim_Fichier) contient les informations suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    0.0/*element 0*/ | 1.1/*element 1*/    // ligne 0
    0.2/*element 0*/ | 2.2/*element 1*/    // ligne 1
    0.3/*element 0*/ | 3.3/*element 1*/    // ligne 2
    Donc pour recuperer la valeur 0.3 du tableau tu met :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String My_Value = Tab2Dim_Fichier[2][0];
    Apres si tu veut l'enregistrer dans ton datagridview tu parcours le tableau avec une double boucle for (une pour les lignes et une autre pour les element de chaque ligne)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for(int ligne = 0;ligne < Tab2Dim_Fichier.Count;ligne++)
    {
       for(int colonne = 0; colonne < Tab2Dim_Fichier[ligne].GetLength(0); colonne++)
       {
           //Remplis ton dataGrid (désolé je n'ai jamais utilise de DGV, je peut pas t'aider pour ça)
       }
    }
    Je ne fais que du C# / C++ donc si tu veut traduire en VB.net : c'est ici :Convertisseur C# -> VB.net

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 238
    Points : 269
    Points
    269
    Par défaut
    Remplire un DG ca je sais faire :p

    C'est plus facile de remplire le DataGridView directement par ligne.
    Une fois que tu aura récupérer les informations dans la List de String[] tu peux faire comme ca pour remplire ton DataGridView

    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
     
     
    //Construction du DG
    MonDataGridView.Name = "DG_CALCULATEUR";
    MonDataGridView.ColumnCount = 2;
     
    MonDataGridView.Columns[0].Name = "Toto";
    MonDataGridView.Columns[1].Name = "Titi";
     
    //Initialisation
    String[] row = new String[2];
     
    row[0] = element0;
    row[1] = element1;
     
    MonDataGridView.Rows.Add(row);

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 324
    Points : 343
    Points
    343
    Par défaut
    C'est plus facile de remplire le DataGridView directement par ligne.
    Ok donc, l'algorythme de remplissage de ton DGV doit donner ça en gros :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //Construction du DG
    MonDataGridView.Name = "DG_CALCULATEUR";
    MonDataGridView.ColumnCount = 2; // mouais j'espere que MatP a un nombre de colonne predefinis
    
    MonDataGridView.Columns[0].Name = "Toto";
    MonDataGridView.Columns[1].Name = "Titi"; 
    for(int ligne = 0; ligne < Tab2Dim_Fichier.Count; ligne++)
    {   
       MonDataGridView.Rows.Add(Tab2Dim_Fichier[ligne]);
    }

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 238
    Points : 269
    Points
    269
    Par défaut
    Ca me semble correcte.

    Si le nombre de colonne n'est pas définis tu peux toujours ajouter une colonne dynamiquement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    int indice = 2; //Indice d'insertion de la nouvelle colonne
     
    DataGridViewColumn MaColonne = new DataGridViewColumn;
    MonDataGridView.Columns.Insert(indice, MaColonne);
    Tu peux construire dynamiquement un dataGridView des pieds à la tête... enfin des Cellules aux Headers

  7. #7
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 79
    Points : 57
    Points
    57
    Par défaut
    Ouin sauf que en bout de ligne c'est pas moins performant? Me semble, parcourir le fichier ligne par ligne pour stocker les infos, et ensuite faire une boucle imbriquée pour remplir mon DGV, et après ca j'ai un graphique à tracer, donc je vais avoir une autre boucle à faire de cette facon. Si mon fichier contient 10000 lignes, me semble ca va faire long.

    Une requête SQL et bindé ma table au DGV et au graphique, ce serait pas plus efficace??

  8. #8
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 79
    Points : 57
    Points
    57
    Par défaut
    C'est quoi l'Équivalent en Vb de :
    private List<String[]> Tab2Dim_Fichier = new List<String[]>();

    Pcq j'ai pas ça juste "List" de disponible.

  9. #9
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 79
    Points : 57
    Points
    57
    Par défaut
    Encore une question hehehe

    Le fait de remplir mon DataGridView1 ligne par ligne, ca donne qu'à la fin du remplissage, la propriété DataSource du DGV est toujours vide non? comment je fais pour que le DataSource correspondent à ce qui a été ajouté ligne par ligne... je sais pas si je suis clair?

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 238
    Points : 269
    Points
    269
    Par défaut
    Une requête SQL et bindé ma table au DGV et au graphique, ce serait pas plus efficace??
    - peut être que c'est plus efficasse, mais je savais pas qu'il etait possible d'effectuer des requetes SQL sur un fichier texte...

    C'est quoi l'Équivalent en Vb de :
    private List<String[]> Tab2Dim_Fichier = new List<String[]>();
    - Utilise ArrayList si tu veux ou tout autre type de collection. Liste < > te permet juste de faire une Collection "typé" (le type est dans < >)

    la propriété DataSource du DGV est toujours vide non
    -Effectivement la propriété est toujours vide. Perso j'en ai pas eu besoin donc j'ai fait une insertion ligne par ligne. Si tu trouve un autre moyen plus adapté hésite pas

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 324
    Points : 343
    Points
    343
    Par défaut
    Une requête SQL et bindé ma table au DGV et au graphique, ce serait pas plus efficace??
    Euh la je suis pas specialiste en matière de performance mais faire des requete SQL ou quoi que ce soit en matiere de base de données relationnelle : ben c'est super long a executer ! Alors certes ça sera peut etre un peu plus facile a coder mais est-ce que ça vaut le coup ?
    a propriété DataSource du DGV est toujours vide non
    Dite moi si je me trompe mais c'est seuleument pour lier les DGV au DataSet ce champs ... donc c'est normal

Discussions similaires

  1. [ADO.Net] Infos concernant l'utilisation de base SQL en fichier mdf
    Par zax-tfh dans le forum Accès aux données
    Réponses: 7
    Dernier message: 05/03/2009, 11h59
  2. Fichier manquant en utilisant une base de données DBF
    Par Stephane Michaud dans le forum Bases de données
    Réponses: 1
    Dernier message: 24/07/2005, 11h22
  3. [ODBC] Utiliser une base de données Access sans les MFC
    Par Higestromm dans le forum Bases de données
    Réponses: 6
    Dernier message: 15/03/2005, 21h37
  4. utilisation de base de donnée
    Par mohfa1 dans le forum Bases de données
    Réponses: 2
    Dernier message: 03/03/2005, 17h40
  5. [débutant] Connection à une base de donnée Access
    Par Lorenzox dans le forum JBuilder
    Réponses: 1
    Dernier message: 25/10/2004, 16h28

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