3

多くの人にとっては単純な問題のように思えるかもしれませんが、私がやろうとしているのは、StreamReader各行を ' ,' 区切り文字と、その各部分をDatatable's列に格納してから、データテーブルをグリッドビューにバインドしています。私の問題は、コードを記述しましたが、このように空のグリッドビューを取得していることです

ここに画像の説明を入力
デザイナーから作成した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. -loopの外側に追加しDataColumnてコードを移動する必要がありますfor
  2. メソッドDataRowを使用して新しいものを作成する必要がありますDataTable.NewRow
  3. データ バインディング メソッドは、ループの後で 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));

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 に答える