【问题标题】:import form text file to gridview c#将表单文本文件导入gridview c#
【发布时间】:2017-09-12 17:40:59
【问题描述】:

我正在尝试使用自爆代码将数据从文本文件导入网格视图:

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();

我的文件是这样的:

A B C

E F D C C

E D D D

DP

然后我得到以下错误

输入数组长于c#应用中此表的列数

【问题讨论】:

  • 您正在为每一行添加列。你应该只添加一次。

标签: c# sql asp.net gridview datagridview


【解决方案1】:

当所需的列数(Split(' ') 之后)大于 实际 (dt.Columns.Count) 一时,您应该添加新列:

  // File.ReadLines is easier to read and maintain
  var items = File
   .ReadLines(@"d:\My File3.log") // single \ since we have verbatim string @ 
 //.Where(line => !string.IsNullOrWhiteSpace(line)) // if you want to remove empty lines 
   .Select(line => line.Trim().Split(' '));

  DataTable dt = new DataTable();

  foreach (var line in items) {
    // Do we want extra columns?
    while (line.Length > dt.Columns.Count)
      dt.Columns.Add(new DataColumn($"Column {dt.Columns.Count}", typeof(string)));

    dt.Rows.Add(line);
  }

  GridView1.DataSource = dt;
  GridView1.DataBind();

【讨论】:

  • @marwen1:不客气!希望,你有这个想法
【解决方案2】:

看起来您已经根据第一行创建了tablecolumns,但在第二行中的列比第一行多。请检查下面的代码,它将基于MAX 列工作。

代码:

DataTable dt = new DataTable();

List<string[]> list = new List<string[]>();
int maxItem = 0;
using (System.IO.TextReader tr = File.OpenText((@"d:\\My File3.log")))
{
    string line;
    while ((line = tr.ReadLine()) != null)
    {

        string[] items = line.Trim().Split(' ');

        if (maxItem <= items.Count())
        {
            maxItem = items.Count();
        }

        list.Add(items);
    }

    for (int i = 0; i < maxItem; i++)
        dt.Columns.Add(new DataColumn("Column" + i, typeof(string)));

    foreach (var items in list)
    {
        dt.Rows.Add(items);
    }

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

在您的数据中,某行包含empty。因此,您必须检查代码中的empty 行。

您的数据输出:

【讨论】:

    猜你喜欢
    • 2017-07-03
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    相关资源
    最近更新 更多