如何从目录中读取所有文件并放入现有的datagridview

时间:2014-08-14 09:39:46

标签: c# file datagridview io

我有这段代码。

private void button2_Click(object sender, EventArgs e)
{
    dataGridView1.AllowUserToAddRows = false;
    int xy = dataGridView1.Rows.Count;
    string[] Files = System.IO.Directory.GetFiles(@"f:\ecet\");

    foreach (string sFile in Files)
    {
        for (int i = 0; i < dataGridView1.Rows.Count; i++)
        {
            string fileCont = System.IO.File.ReadAllText(sFile);

            dataGridView1.Rows[i].Cells[1].Value = fileCont.ToString();       
        }
    }
}

我有错。在“ecet”文件夹中,我有3个文件。 (所有.txt)

当我运行程序时,这只是将最后一个txt文件的内容放在所有三行datagrindview中。

我希望将第一个txt放到第一行,将第二个放到第二行,然后打开。

3 个答案:

答案 0 :(得分:0)

你可以尝试这个:

// Declare an array, in which you will store the contents of your file.
string[] contents = new string[Files.Length];

// For each file in you Files collection read it's contents and add it to the contents array
 for(int i=0; i<contents.Length; i++)
     contents[i] = System.IO.File.ReadAllText(Files[i]);

// Set the datasource of your data grid view and databind it.
dataGridView1.DataSource = contents;
dataGridView1.dataBind();

答案 1 :(得分:0)

private void button2_Click(object sender, EventArgs e)
{

    dataGridView1.AllowUserToAddRows = false;
    string[] Files = System.IO.Directory.GetFiles(@"f:\ecet\");

    DataTable table = new DataTable();
    table.Columns.Add("Content".ToString());

    foreach (string sFile in Files)
    {
        string fileCont = System.IO.File.ReadAllText(sFile);
        DataRow dr = table.NewRow();
        dr["Content"] = fileCont;
        table.Rows.Add(dr);

    }

    dataGridView1.DataSource = table;
}

试试这个:)

使用您的代码覆盖每个新文件的所有单元格。

答案 2 :(得分:0)

这里你可以用Linq

来做
var files = System.IO.Directory.GetFiles(@"f:\ecet\").Select(t => Sytem.IO.File.ReadAllText(t)).ToList();
dataGridView1.DataSource = files;