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

C# Discussion :

fichier csv & datagrid


Sujet :

C#

  1. #1
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Avril 2011
    Messages : 34
    Points : 17
    Points
    17
    Par défaut fichier csv & datagrid
    Bonjour
    j'ai un fichier csv composé de 3 champ ( nom du produit , type,quantité) (ex : RedBull,B.F,10000) je voudrai bien lire dans mon fichier et si la quantité est inférieur a 100 j'affiche un message Box )

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    using System;
    using System.Collections;
    using System.IO;
    using System.Text;
    using System.Windows.Forms;
     
    namespace Projets_Machine_2011
    {
        public partial class csv : Form
        {
            public csv()
            {
                InitializeComponent();
            }
     
            private void Afficher_Click(object sender, EventArgs e)
            {
                dataGridView1.Columns.Add("Nom", "Nom");
                dataGridView1.Columns.Add("type", "type");
                dataGridView1.Columns.Add("quantité", "quantité");
     
                CSV csvFile = new CSV("produits.csv");
                ArrayList produits = csvFile.Getproduits();
     
                for (int i = 0; i < produits.Count; i++)
                {
                    object[] record = (object[])produits[i];
                    dataGridView1.Rows.Add(record);
                }
            }
     
            private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
            {
     
            }
            public class CSV
            {
                private StreamReader reader;
                private ArrayList list_produits;
                private ArrayList _record;
     
                public CSV(string filename)
                {
                    reader = new StreamReader(filename);
                }
     
                public ArrayList Getproduits()
                {
                    list_produits = new ArrayList();
                    _record = new ArrayList();
     
                    string line = "";
     
                    while ((line = reader.ReadLine()) != null)
                    {
                        object[] record = line.Split(',');
                        list_produits.Add(record);
                    }
     
                    return list_produits;
                }
            }
        }
    }
    Merci de m'aider

  2. #2
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Points : 1 108
    Points
    1 108
    Par défaut
    Bonjour
    Qu'est-ce que tu n'arrives pas à faire exactement ?

    Après j'ai quelques remarques :
    ArrayList est plutôt abanndoné... on a tendance à utiliser des List<T> où T est le type d'objet contenu dans la liste (pour toi des Object[]).
    Plutôt que d'utiliser ces tableaux tu ferais mieux d'utiliser des objets "Article" ayant les attributs qui vont bien et retourner une List<Article>.
    Tu pourrais ensuite faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaList.FindAll(a=>a.Quantite <= 100)
    qui te donnerait tous les éléments à 100 ou moins. (FW > 2.0)
    Enfin tu veux afficher un message à chaque articke où qt<100 ? En tant que user ça me gaverait d'avoir à cliquer 50x sur un pop-up qui m'averti que mon produit est en qt critique ! Après c'est peut-être une demande faite dans le CDC...

  3. #3
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Avril 2011
    Messages : 34
    Points : 17
    Points
    17
    Par défaut
    Je sais bien que les ArrayList est un petit peu abandonné , j'ai essayé de faire autrement mais le probleme j'ai pas assez de temps pour comprendre comment ca marche les List<T>
    et sinon je voudrai afficher un message box automatique des que le champ qt<100 ( c'est imposé dans le CDc)
    et sinon vous auriez pas un tuto pour utiliser des objets "Article" qui peuvent me retourner une List<Article>.

  4. #4
    Membre éprouvé
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Points : 1 111
    Points
    1 111
    Par défaut
    Citation Envoyé par d_sandra Voir le message
    Je sais bien que les ArrayList est un petit peu abandonné , j'ai essayé de faire autrement mais le probleme j'ai pas assez de temps pour comprendre comment ca marche les List<T>
    et sinn je voudrai afficher un message box automatique des que le champ qt<100 ( c'est imposé dans le CDc)
    et sinon vous auriez pas un tuto pour utiliser des objets "Article" qui peuvent me retourner une List<Article>.
    Un cours sur C# et la POO en gros ?

    Les listes sont très simples d'utilisations, je te laisse consulter la doc msdn là dessus : Lien

    Pour la programmation objet, je pense que les premiers chapitres de ce cours pourraient t'être utiles : Lien

  5. #5
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Avril 2011
    Messages : 34
    Points : 17
    Points
    17
    Par défaut
    et sinn je pourrai pas réssoudre mon probléme ts en utilisant les ArrayList ?

  6. #6
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Points : 1 108
    Points
    1 108
    Par défaut
    Ton problème c'est retrouver les articles où qt < 100 ? en 2 heures tu changes tes ArrayList en List<T> (c'est presque pareil), tu crées une classe objets et tu mappes tes lignes de csv dans ta collection d'objet. ensuite tu utilises le bout de code que je t'ai déjà donné et ça roule !

    Et quand je dis 2h, je suis très large. Ca doit être faisable en 30 minutes (quand on connais un peu les bases de la POO et de la lecture de fichier)

    Mais bon, une ArrayList qui contient des objets "article", c'est envisageable... tu peux juste y ajouter des objets "patate" et des objets "filet de truite marinée"... ce qui pose des problèmes ensuite car tu dois vérifier tes types avant de faire des traitements... et pourquoi pas y ajouter des integers...

  7. #7
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Avril 2011
    Messages : 34
    Points : 17
    Points
    17
    Par défaut
    Bnjour
    j'ai essayé autrement , t'aurai pas un idée pour afficher pop up quand une quentité est <100 je dois présenter mon projet demain !
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;
    using System.Data.SqlClient;
    using System.Windows.Documents;
    using System.Windows.Controls;
    using ADOX;
    namespace Import
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
     
            public static string SelectedTable = string.Empty;
     
            private void button1_Click_1(object sender, EventArgs e)
            {
                OpenFileDialog fdlg = new OpenFileDialog();
                fdlg.Title = "Select file";
                fdlg.InitialDirectory = @"c:\";
                fdlg.FileName = txtFileName.Text;
                fdlg.Filter = "Text and CSV Files(*.txt, *.csv)|*.txt;*.csv|Text Files(*.txt)|*.txt|CSV Files(*.csv)|*.csv|All Files(*.*)|*.*";
                fdlg.FilterIndex = 1;
                fdlg.RestoreDirectory = true;
                if (fdlg.ShowDialog() == DialogResult.OK)
                {
                    txtFileName.Text = fdlg.FileName;
                    Import();
                    Application.DoEvents();
                }
            }
     
            private void Import()
            {
                if (txtFileName.Text.Trim() != string.Empty)
                {
                    try
                    {
                        DataTable dt = GetDataTable(txtFileName.Text);
                        dataGridView1.DataSource = dt.DefaultView;
     
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message.ToString());
                    }
                }
            }
     
            public static DataTable GetDataTable(string strFileName)
            {
                ADODB.Connection oConn = new ADODB.Connection();
                oConn.Open("Provider=Microsoft.Jet.OleDb.4.0; Data Source = " + System.IO.Path.GetDirectoryName(strFileName) + "; Extended Properties = \"Text;HDR=YES;FMT=Delimited\";", "", "", 0);
                string strQuery = "SELECT * FROM [" + System.IO.Path.GetFileName(strFileName) + "]";
                ADODB.Recordset rs = new ADODB.Recordset();
                System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter();
                DataTable dt = new DataTable();
                rs.Open(strQuery, "Provider=Microsoft.Jet.OleDb.4.0; Data Source = " + System.IO.Path.GetDirectoryName(strFileName) + "; Extended Properties = \"Text;HDR=YES;FMT=Delimited\";",
                    ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, 1);
                adapter.Fill(dt, rs);
                return dt;
            }
     
            private void Form1_Load(object sender, EventArgs e)
            {
     
            }
        }
    }

  8. #8
    Membre éclairé Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 612
    Points : 685
    Points
    685
    Par défaut
    Ben peut-être déjà la class :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Produit
      {
        public string Nom { get; set; }
        public string TypeProd { get; set; }
        public int Quantite { get; set; }
     
        public Produit(string nom, string typeProd, int quantite)
        {
          Nom = nom;
          TypeProd = typeProd;
          Quantite = quantite;
        }
      }
    Ensuite ta fonction de récupération des données de ton fichier :
    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
    public List<Produit> Getproduits()
        {
          List<Produit> list_produits = new List<Produit>();
          int quant;
     
          string line = "";
     
          while ((line = reader.ReadLine()) != null)
          {
            string[] record = line.Split(',');
            int.TryParse(record[2], out quant);
            list_produits.Add(new Produit(record[0], record[1], quant));
            if (quant < 100)
            {
              MessageBox.Show("Les carottes sont cuites !");
            }
          }
     
          return list_produits;
        }
    Après, l'appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Produit> list = Getproduits();
    Un autre utilisation possible de ta liste (comme décrit par kheironn)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    List<Produit> listMinus100 = list.FindAll(a => a.Quantite <= 100);
          foreach (Produit p in listMinus100)
          {
            MessageBox.Show(p.Nom + "<100");
          }

  9. #9
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Points : 1 108
    Points
    1 108
    Par défaut
    roohh ppphil, tu fais tout le travail là... c'est bien parce que notre étudiante est à l'arrache !

    Dans le code de récupération des données, j'aurai joué sur le retour du tryparse afin d'éviter de coller des mauvaises quantités en cas d'echec de parse.

  10. #10
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Avril 2011
    Messages : 34
    Points : 17
    Points
    17
    Par défaut
    Ben en ts cas Merci , au mm temps on pourrai pas être doué dans ts les domaines et les Forums N’exciteront pas si il y avait pas des étudiants a l'arrache !

  11. #11
    Membre éclairé Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 612
    Points : 685
    Points
    685
    Par défaut
    Citation Envoyé par kheironn Voir le message
    Dans le code de récupération des données, j'aurai joué sur les retour des tryparse afin d'éviter de coller des mauvaises quantités en cas d'echec de parse.
    Absolument votre Majesté !!

Discussions similaires

  1. Mise à jour d'une table avec un fichier csv
    Par blackangel dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 26/05/2005, 14h46
  2. Importation de fichier CSV vers une base Interbase
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 15/03/2005, 15h18
  3. Mettre a jour BD avec fichier csv
    Par Looping94510 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 07/02/2005, 18h56
  4. Sortir un fichier csv sur base d une requete
    Par Freeman_80 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 12/01/2005, 11h21
  5. Réponses: 2
    Dernier message: 14/05/2004, 12h55

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