Member 12140172 Ответов: 2

Импорт из текстового файла в gridview


I'm trying to import data from text file to grid view  using the blew code :

 

   
My file is like :

A B C

E F D C C 

E D D D

D P


Then I get the following error 
>Input array is longer than the number of columns in this table in c# application


Что я уже пробовал:

DataTable dt = new DataTable();
   using (System.IO.TextReader tr = File.OpenText((@"d:\\My File3.log")))
   {
       string line;
       while ((line = tr.ReadLine()) != null)
       {

           string[] items = line.Trim().Split(' ');
           if (dt.Columns.Count == 0)
           {
               // Create the data columns for the data table based on the number of items
               // on the first line of the file
               for (int i = 0; i < items.Length; i++)
                   dt.Columns.Add(new DataColumn("Column" + i, typeof(string)));
           }
           dt.Rows.Add(items);

       }
       //show it in gridview
       this.GridView1.DataSource = dt;
       this.GridView1.DataBind();

2 Ответов

Рейтинг:
9

madhav_jain

Сначала вам нужно получить максимальный столбец из файла и создать Datatable, чем зациклить его и показать в Gridview. используйте приведенный ниже код

 DataTable dt = new DataTable();
            using (System.IO.TextReader tr = File.OpenText((@"C:\Users\madhav.jain\Desktop\ss.txt")))
            {
                string line;
//add new list of string arrey
                List<string[]> lststr = new List<string[]>();
                while ((line = tr.ReadLine()) != null)
                {

                    string[] items = line.Trim().Split(' ');
                    lststr.Add(items);
                }
                int col = lststr.Max(x => x.Length);
                if (dt.Columns.Count == 0)
                {
                    // Create the data columns for the data table based on the number of items
                    // on the first line of the file
                    for (int i = 0; i < col; i++)
                        dt.Columns.Add(new DataColumn("Column" + i, typeof(string)));
                }
// loop the list 
                foreach (string[] item in lststr)
                {
                    dt.Rows.Add(item);
                }


            }
                //show it in gridview 
                this.gv.DataSource = dt;
                this.gv.DataBind();


Рейтинг:
13

Michael_Davies

Вы указываете проблему в своем комментарии, количество столбцов основано на длине первой строки файла, вторая строка длиннее первой, и поэтому столбцов недостаточно.

Я еще не пробовал это сделать, и это может потребовать настройки, но вот грубое исправление;

string[] items = line.Trim().Split(' ');
           if (dt.Columns.Count < items.Length)
           {
               for (int i = dt.Columns.Count; dt.Columns.Count <> items.Length; i++)
                   dt.Columns.Add(new DataColumn("Column" + i, typeof(string)));
           }