DataGridView添加行显示底部的乱码行

时间:2018-05-21 13:16:12

标签: c# .net winforms datagridview

我正在构建一个简单的工具来编辑分号分隔的值文件,我使用datagridview来显示和编辑数据。当我在datagridview中显示数据时,最后一行中的文本显示得很糟糕,这很奇怪,因为最后一行应该是空的。当camel-archetype-java为true时会发生这种情况。当我将此属性设置为false时,最后一行显示正确,但我希望能够向datagridview添加行。我尝试通过单击按钮添加空行然后执行以下代码行来完成此操作:AllowUserToAddRows其中DataTable的类型为DataGridView,但同样的渲染问题再次发生。在这两种情况下,当我单击错误呈现的行并单击其他行时,我会在DataTable.Rows.Add();上获得ArgumentOutOfRangeException。这是DataGridView中的一个错误,如果有的话,是否有解决方法,我可以在DataGridView中加载基于文本的分号分隔值文件并能够为其添加行?或者我是否需要更改某些属性?

1 个答案:

答案 0 :(得分:1)

首先,您需要将文件正确转换为DataTable。 然后将DataSource的{​​{1}}设置为使用该文件加载的数据表。将DataGridView设置为true,然后将AllowUserToAddRows保存回文件。

示例

我们这里说的是文件内容:

DataTable

我们希望将其显示在Column1;Column2 a1;b1 a2;b2 a3;b3 中,如下所示:

DataGridView

您可以使用以下代码简单地加载和保存数据:

| Column1     | Column2    |
|=============|============|
|a1           |b1          |
|-------------|------------|
|a2           |b2          |
|-------------|------------|
|a3           |b3          |
|-------------|------------|
|             |            |
|-------------|------------|

的LoadFile

DataTable dt;
string fileName = @"d:\file1.txt";
private void Form1_Load(object sender, EventArgs e)
{
    dt = LoadFile(fileName);
    this.dataGridView1.DataSource = dt;
}
private void SaveButton_Click(object sender, EventArgs e)
{
    SaveFile(dt, fileName);
}

SAVEFILE

DataTable LoadFile(string fileName)
{
    var dt = new DataTable();
    var lines = System.IO.File.ReadAllLines(fileName);
    if (lines.Count() == 0)
        return dt;
    lines.First().Split(';').ToList().ForEach(x =>
    {
        dt.Columns.Add(new DataColumn(x));
    });
    lines.Skip(1).ToList().ForEach(x =>
    {
        dt.Rows.Add(x.Split(';'));
    });
    return dt;
}