C#, DataGridView And DataTable

本文关键字:DataTable And DataGridView | 更新日期: 2023-09-27 18:22:21

我有一个小问题。我以前从未使用过DataTable或Datagridview。我成功地添加了一个列名,但当添加行时,所有值都添加在一列中。这是代码:

StreamReader sr = new StreamReader(filename);
    DataTable table = new DataTable();
    string [] datarow;
    colt = sr.ReadLine();
    string[] columns = colt.Split(';');
    Count = columns.Length;
    foreach (string c in columns)
    {
        Table1.Columns.Add("Column", c);
        table.Columns.Add(c, typeof(String));
    }
    while (!sr.EndOfStream)
    {
        rowt = sr.ReadLine();
        datarow = rowt.Split(';');
        foreach (string a in datarow)
        {         
            table.Rows.Add(a);
            Table1.Rows.Add(a);
        }
    }
}

C#, DataGridView And DataTable

首先,您只看到数据被添加到第一列的原因是DataGridview.Add方法向表中添加了整行,而不是单个元素。这就是为什么所有内容都显示在第一列中。要解决这个问题,请像这样传入整个数组:

table.Rows.Add(datarow);

其次,不应该将DataGridView与DataTable分开填充。这将创建数据的两个副本,用户在视图中编辑的任何数据都将与DataTable不同步。相反,填充DataTable,然后将其绑定到DataGridview。用户所做的任何更改都将反映在DataTable中。你的代码看起来像这样:

using (StreamReader sr = new StreamReader(filename))
{
    string [] datarow;
    colt = sr.ReadLine();
    string[] columns = colt.Split(';');
    Count = columns.Length;
    foreach (string c in columns)
    {
        table.Columns.Add(c, typeof(String));
    }
    while (!sr.EndOfStream)
    {
        rowt = sr.ReadLine();
        datarow = rowt.Split(';');
        table.Rows.Add(datarow);
    }
    Table1.DataSource = table;
}