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);
}
}
}
首先,您只看到数据被添加到第一列的原因是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;
}