我的文本文件将无法读取并显示在DataGridView上

时间:2014-01-15 04:31:10

标签: c# datagridview text-files streamreader

private void write(object sender, EventArgs e)
{
    FileStream outputFileStream = new FileStream("test.txt", FileMode.Create, FileAccess.Write);
    StreamWriter writer = new StreamWriter(outputFileStream);
    Random r = new Random();

    for (int i = 0; i < dataGridView1.RowCount; i++)
    {
        for (int j = 0; j < dataGridView1.ColumnCount; j++)
        {
            double d = 0;
            Double.TryParse(Convert.ToString(dataGridView1.Rows[i].Cells[j].Value), out d);

            writer.Write(d + "\t");
        }
        writer.Write("\n");
    }

    writer.Close();
    outputFileStream.Close();
}

所以这是编写文本文件的方法。它工作正常,因为我用Excel成功打开它。我甚至试图复制并粘贴它,它会工作。现在的问题是......

private void read(object sender, EventArgs e)
{

    char TAB = '\t';
    char NEWLINE = '\n';

    FileStream inputFileStream = new FileStream("test.txt", FileMode.Open, FileAccess.Read);
    StreamReader reader = new StreamReader(inputFileStream);

    string line;
    string[] fields;

    for (int i = 0; i < dataGridView1.RowCount; i++)
    {
        for (int j = 0; j < dataGridView1.ColumnCount; j++)
        {
            line = reader.ReadLine();
            fields = line.Split(TAB, NEWLINE);
            dataGridView1.Rows[i].Cells[j].Value = fields;
        }
    }
    inputFileStream.Close();
    reader.Close();
}

然而,当我将文件读回到DataGridView时,它无法正常工作。现在这是我在代码中写的确切文本文件。相反,它只显示在一行上。如何从用户输入的内容中获取列数和行数?我更喜欢把它保存为文本文件。

我使用了dataGridView1

的默认属性

2 个答案:

答案 0 :(得分:2)

RowCount返回显示的行数。所以这里它返回1,因为你显示一行而且它是空的:

for (int i = 0; i < dataGridView1.RowCount; i++)

而不是这样,您应该创建新行并将其添加到Rows集合中,如下所示:

// Use File.ReadAllLines, it's easier
string[] lines = File.ReadAllLines("test.txt");

foreach(line in lines)
{
   var text = line.Split('\t','\n');
   dataGridView1.Rows.Add(text);
}

答案 1 :(得分:0)

System.IO.StreamReader file = new System.IO.StreamReader("yourfile.txt");
string[] columnnames = file.ReadLine().Split(' ');
DataTable dt = new DataTable();

foreach (string c in columnnames)
{
    dt.Columns.Add(c);
}
string newline;
while ((newline = file.ReadLine()) != null)
{
    DataRow dr = dt.NewRow();
    string[] values = newline.Split(' ');
    for (int i = 0; i < values.Length; i++)
    {
        dr[i] = values[i];
    }
    dt.Rows.Add(dr);
}
file.Close();
dataGridView1.DataSource = dt;

尝试使用您自己的分隔符,即 \ t 和\ n。首先尝试在发布查询之前在互联网上搜索您的问题并尝试自己解决。我没有提供完整的代码。