3

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

在此处输入图像描述
我从设计师创建的 Gridviews 列标题autogeneratecolumns="false"

我的代码是

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

希望你明白我想问的。

4

3 回答 3

2

像这样的东西怎么样:

    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();
    }
于 2012-12-20T11:48:00.707 回答
1
  1. 您应该通过添加DataColumn外部for-loop 来移动代码
  2. 您应该创建新的DataRowusingDataTable.NewRow方法
  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();
于 2012-12-20T11:35:37.250 回答
1

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

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();
于 2012-12-20T11:36:10.533 回答