3 votes

Remplir GridView à l'exécution en utilisant un fichier texte

Il peut sembler être un problème simple pour beaucoup d'entre vous, mais ce que je suis en train de faire, c'est de lire un fichier texte sur un événement de clic en utilisant StreamReader (ASP.net & C#) après avoir lu ce fichier texte, je divise chaque ligne avec le délimiteur ',' et ensuite chaque partie est stockée dans la colonne de DataTable puis je lie le datatable à mon gridview, mon problème est que j'ai écrit le code mais j'obtiens un gridview vide comme ceci

entrer la description de l'image ici
J'ai créé l'en-tête de la colonne du gridview à partir du concepteur avec autogeneratecolumns="false"

mon code est

protected void readfile_Click(object sender, EventArgs e)
{
    string line;
    DataTable dt = new DataTable();
    using (StreamReader sr = new StreamReader(@"D:\Temp\fileread\readtext.txt"))
    {
        while ((line = sr.ReadLine()) != null)
        {
            string[] parts = line.Split(',');
            dt.Rows.Add();
            for (int i = 0; i < parts.Length; i++)
            {
                dt.Columns.Add();
                dt.Rows[0][i] = parts[i];
                MyGridView.DataSource = dt;
                MyGridView.DataBind();
            }
        }
        sr.Close();
    }

mon fichier texte contient des données

1,1,4,2,"#",Description1
5,5,4,2,"#",Description2
3,3,6,3,"#",Description3
2,2,4,2,"#",Description4
4,5,4,2,"#",Description5

J'espère que vous avez compris ce que je suis en train de demander.

2voto

Denis Points 4290

Que diriez-vous de quelque chose comme ceci:

    protected void readfile_Click(object sender, EventArgs e)
    {
        DataTable table = new DataTable();
        table.Columns.Add("Numéro de ligne");
        table.Columns.Add("Numéro de colonne");
        table.Columns.Add("Largeur");
        table.Columns.Add("Hauteur");
        table.Columns.Add("URL de l'image");
        table.Columns.Add("Description");

        using (StreamReader sr = new StreamReader(@"D:\Temp\fileread\readtext.txt"))
        {
            while (!sr.EndOfStream)
            {
                string[] parts = sr.ReadLine().Split(',');
                table.Rows.Add(parts[0], parts[1], parts[2], parts[3], parts[4], parts[5]);
            }
        }
        MyGridView.DataSource = table;
        MyGridView.DataBind();
    }

1voto

VMAtm Points 8401
  1. Vous devez déplacer votre code en ajoutant la DataColumn à l'extérieur de la boucle for
  2. Vous devez créer une nouvelle DataRow en utilisant la méthode DataTable.NewRow
  3. Vous ne devez appeler les méthodes de liaison des données qu'une seule fois et après les boucles.

Votre code devrait ressembler à ceci:

DataTable dt = new DataTable();
dt.Columns.Add("Row No", typeof(Int32));
dt.Columns.Add("Col No", typeof(Int32));
dt.Columns.Add("Width", typeof(Int32));
dt.Columns.Add("Height", typeof(Int32));
dt.Columns.Add("ImageUrl", typeof(String));
dt.Columns.Add("Description", typeof(String));

using (StreamReader sr = new StreamReader(@"D:\Temp\fileread\readtext.txt"))
{
    while ((line = sr.ReadLine()) != null)
    {
        string[] parts = line.Split(',');
        var row = dt.NewRow();
        for (int i = 0; i < parts.Length; i++)
        {
            row[i] = parts[i];
        }
        // chose importante!
        dt.Rows.Add(row);
    }
    sr.Close();
}
MyGridView.DataSource = dt;
MyGridView.DataBind();

1voto

rs. Points 11670

Ajouter des colonnes au datatable en utilisant le code ci-dessous

DataTable dt = new DataTable();
dt.Columns.Add("Numéro de ligne", typeof(Int32));
dt.Columns.Add("Numéro de colonne", typeof(Int32));
dt.Columns.Add("Largeur", typeof(Int32));
dt.Columns.Add("Hauteur", typeof(Int32));
dt.Columns.Add("URL de l'image", typeof(String));
dt.Columns.Add("Description", typeof(String));

Et lier le datatable (dt) après avoir peuplé toutes les lignes dans le datatable, après la boucle while

using (StreamReader sr = new StreamReader(@"D:\Temp\fileread\readtext.txt"))
{
    while ((line = sr.ReadLine()) != null)
    {
        string[] parts = line.Split(',');
        var dr = dt.NewRow(); //utiliser newrow pour créer une nouvelle ligne
        for (int i = 0; i < parts.Length; i++)
        {
            dr[i] = parts[i];
        }

        dt.Rows.Add(dr); //ajouter la ligne au datatable maintenant
    }
    sr.Close();
}
//lier le datatable au GridView après avoir chargé le fichier dans dt
MyGridView.DataSource = dt;
MyGridView.DataBind();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X