none
Import/Export datagridview vers csv RRS feed

  • Question

  • Bonjour,

    J'ai crée un tableur qui permet l'insertion de données ainsi que l'export.

    Seulement, j'ai un problème lorsque que j'ouvre à nouveau le csv avec mon programme les données sont parfois décalées...

    Je ne comprends pas d'ou est ce que cela vient. 

    Un peu d'aide ne serait pas de refus.

    Merci beaucoup :)

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.IO;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
    
            DataGridView my_datagridview = new DataGridView();
            DataTable my_datatable = new DataTable();
            TextBox text_box_export = new TextBox();
            Button export_btn = new Button();
    
    
    
            public Form1()
            {
                InitializeComponent();
            }
    
    
    
    
    
            private void Form1_Load(object sender, EventArgs e)
            {
                this.Size = new Size(750, 450);
                my_datagridview.Size = new Size(600, 400);
                my_datagridview.Location = new Point(5, 5);
    
    
                export_btn.Size = new Size(100, 50);
                export_btn.Location = new Point(470, 5);
                export_btn.Text = "Export";
    
                string[] raw_text = System.IO.File.ReadAllLines("C:\\test.csv");
                string[] data_col = null;
                int x = 0;
    
    
                text_box_export.Size = new Size(350, 340);
                text_box_export.Location = new Point(470, 65);
                text_box_export.Multiline = true;
    
    
                
                export_btn.Click += new EventHandler(export_btn_Click);
    
                this.Controls.Add(export_btn);
    
                this.Controls.Add(text_box_export);
    
    
                foreach (string text_line in raw_text)
                {
                    // MessageBox.Show(text_line);
                    data_col = text_line.Split(',');
                    if (x == 0)
                    {
                        for (int i = 0; i <= data_col.Count() - 1; i++)
                        {
                            my_datatable.Columns.Add(data_col[i]);
    
                        }
                        x++;
    
                    }
                    else
                    {
                        my_datatable.Rows.Add(data_col);
    
                    }
    
    
    
                }
                my_datagridview.DataSource = my_datatable;
    
                this.Controls.Add(my_datagridview);
            }
    
    
            void export_btn_Click(object sender, EventArgs e)
            {
    
    
                int count_row = my_datagridview.RowCount;
                int count_cell = my_datagridview.Rows[0].Cells.Count;
    
                // MessageBox.Show(count_row.ToString());
                // MessageBox.Show(count_cell.ToString());
    
    
                for (int row_index = 0; row_index <= count_row - 2; row_index++)
                {
    
    
                    for (int cell_index = 0; cell_index <= count_cell - 1; cell_index++)
                    {
    
                       // MessageBox.Show(my_datagridview.Rows[row_index].Cells[cell_index].Value.ToString());
                        text_box_export.Text = text_box_export.Text + my_datagridview.Rows[row_index].Cells[cell_index].Value.ToString() + "";
                        
    
    
    
                    }
                    text_box_export.Text = text_box_export.Text + "\n";
    
    
                }
                System.IO.File.WriteAllText(@"c:\\test.csv", text_box_export.Text);
            }
    
    
    
    
    
        }
    }
    

    lundi 28 décembre 2015 23:36

Réponses

  • Pour un csv, le séparateur est important ;-)

    Donc si à l'import, le séparateur attendu est un ',' il faut aussi à l'export utiliser le même séparateur.

    Donc quand vous exportez Jean Jack 19, vous devez écrire Jean,Jack,19

    Le mieux est d'utiliser string.Join tout comme vous utilisez string.Split


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    mardi 29 décembre 2015 12:02

Toutes les réponses

  • Bonjour,

    Etes-vous sur que toutes les lignes de votre csv contiennent le même nombre de colonne que la première ligne ?


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    mardi 29 décembre 2015 06:33
  • Bonjour, merci de votre réponse.

    Oui, voyez par vous même le problème : 

    Lancement logiciel (ouverture du csv réussie) :

    http://s22.postimg.org/5qjwzavvl/image.png

    Ajout d'une ligne depuis le logiciel (et export des données) : 

    http://s16.postimg.org/5ceycamg5/Capture.png

     Ré-ouverture du csv après l'export :

    http://s4.postimg.org/kyykd02v1/image.png

    Tout est décallé et une ligne carrément été mangé...

    Désolé pour les images mais j'ai pas pu les insérés ici msdn me dis d'activer mon compte et j'ai pas trouvé comment faire ni de mail recu...

    Vous voyez d'ou est ce que ça pourrait venir ce décalage ? 

    Merci :)

    mardi 29 décembre 2015 10:35
  • Pour un csv, le séparateur est important ;-)

    Donc si à l'import, le séparateur attendu est un ',' il faut aussi à l'export utiliser le même séparateur.

    Donc quand vous exportez Jean Jack 19, vous devez écrire Jean,Jack,19

    Le mieux est d'utiliser string.Join tout comme vous utilisez string.Split


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    mardi 29 décembre 2015 12:02
  • Merci, j'ai maintenant résolu le problème des colonnes "compressés".

    Mais le problème de la ligne du haut qui disparait est toujours là :/

    De l'aide ? 

    Bonne soirée :)

    mardi 29 décembre 2015 22:47
  • Si cela a résolu votre problème, merci de proposer comme réponse.

    Concernant votre première ligne, certainement un problème d'index (en .NET tout tableau commence à l'index 0)


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    mercredi 30 décembre 2015 08:07