【问题标题】:Populate Gridview at runtime using textfile在运行时使用文本文件填充 Gridview
【发布时间】:2012-12-20 11:26:29
【问题描述】:

对你们中的许多人来说,这似乎是一个简单的问题,但我想做的是在阅读该文本文件后,我正在使用StreamReader(ASP.net 和 C#)在点击事件中读取一个文本文件我我用','分隔符分割每一行,然后将它的每一部分存储在Datatable's列中,然后将数据表绑定到我的gridview,我的问题是我已经编写了代码,但我得到了这样的空gridview


我用autogeneratecolumns="false" 设计器创建的Gridviews 列标题

我的代码是

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

我的文本文件有数据

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

希望你明白我想问的。

【问题讨论】:

  • 为 gridview 发布您的 aspx 标记

标签: c# asp.net datatable


【解决方案1】:

这样的事情怎么样:

    protected void readfile_Click(object sender, EventArgs e)
    {
        DataTable table = new DataTable();
        table.Columns.Add("Row No.");
        table.Columns.Add("Col No.");
        table.Columns.Add("Width");
        table.Columns.Add("Height");
        table.Columns.Add("Image URL");
        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();
    }

【讨论】:

  • 非常感谢,如果我想做一个小改动,而不是为流式阅读器提供静态路径来读取,我如何使用 OpenFileDialog 读取并执行相同的添加和绑定操作表。
  • 你首先要明白asp.net和windows forms开发不同,不能使用打开文件对话框。你需要先将文件发送到服务器,然后再做进一步处理.Do 谷歌搜索 - 在 asp.net 中使用 fileupload 它将返回许多关于如何做到这一点的示例
  • 我也可以在c#winform中使用这个方法吗?请指教。
【解决方案2】:

使用下面的代码向数据表添加列

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

在你填充数据表中的所有行之后,在while循环之后绑定数据表(dt)

using (StreamReader sr = new StreamReader(@"D:\Temp\fileread\readtext.txt"))
{
    while ((line = sr.ReadLine()) != null)
    {
        string[] parts = line.Split(',');
        var dr = dt.NewRow(); //use newrow to create new row
        for (int i = 0; i < parts.Length; i++)
        {
            dr[i] = parts[i];
        }
        
        dt.Rows.Add(dr); //add row to datatable now
    }
    sr.Close();
}
//bind datatable to Gridview after we load file into dt
MyGridView.DataSource = dt;
MyGridView.DataBind();

【讨论】:

  • 非常感谢,如果我想做一个小改动,而不是为流式阅读器提供静态路径来读取,我如何使用 OpenFileDialog 读取并执行相同的添加和绑定操作表。
【解决方案3】:
  1. 您应该将带有adding the DataColumn 的代码移到for-loop 之外
  2. 您应该使用DataTable.NewRow 方法创建新的DataRow
  3. 您应该只调用一次数据绑定方法,并且在循环之后。

你的代码应该是这样的:

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];
        }
        // important thing!
        dt.Rows.Add(row);
    }
    sr.Close();
}
MyGridView.DataSource = dt;
MyGridView.DataBind();

【讨论】:

  • 非常感谢,如果我想做一个小改动,而不是为流式阅读器提供静态路径来读取,我如何使用 OpenFileDialog 读取并执行相同的添加和绑定操作表。
猜你喜欢
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多