【发布时间】:2019-04-07 10:31:23
【问题描述】:
在 Windows 窗体上,我有两个未绑定的数据网格视图列,每个列都有自己的标题,我正在尝试读取数据表中的 csv 文件并将其绑定到网格。
只有我不知道其中的逻辑。我不知道如何将数据绑定到 2 个数据网格视图列。有很多关于如何将 csv 数据绑定到网格视图的示例,但它们处理的是从文件内部读取的标题,而不是未绑定的标题,除了这个但那是 asp.xml 。 Display data on grid view column programmatically
这是来自 csv 文件的数据。
Address,76 Douglas St Wakecorn
Property name,Wakecorn University
Building,C Block
Room,C2.18
这是读取它的类的代码。
public class Setting
{
private DataTable _dt { get; set; }
public DataTable ProcessSettingFileCMD(string filePath)
{
if (_dt == null)
{
populateControlWithCSVData(filePath);
}
}
private void populateControlWithCSVData(string filePath)
{
_dt = new DataTable();
string[] lines = File.ReadAllLines(filePath);
if(lines.Length > 0)
{
for(int row = 1; row < lines.Length; row++)
{
string[] dataWords = lines[row].Split(',');
DataRow dr = _dt.NewRow();
foreach (string word in lines)
{
dr[word] = dataWords[row++];
}
_dt.Rows.Add(dr);
}
}
}
}
这是表格
private void mnuOpen_Click(object sender, EventArgs e)
{
openFD.InitialDirectory = "C:\\";
openFD.ShowDialog();
_dt = _objSetting.ProcessSettingFileCMD(openFD.FileName);
if (_dt.Rows.Count > 0)
{
gvSettings.DataSource = _dt;
}
}
返回的错误在dr[word] = dataWords[row++];上
System.ArgumentException: '列'地址,76 Douglas St Wakecorn' 不属于表。
【问题讨论】:
-
CSV 中的数据是重复的还是每个文件只有一条记录?此外,您的 CSV 格式不是标准的,因为每条记录位于多行并以标题/名称开头。如果数据是
Address, PropertyName, Building, Room格式并且每条记录在自己的行中,访问数据会更容易 -
CSV 的第一行通常包含列标题(列的名称)。使用该标题创建 DataTable 的列。然后,这不是添加行的方法:
dr[word] = dataWords[row++]; => dr[word]要么指定列名,要么指定列索引。不是当前字段内容。最后,DataGridView 列必须已经将其DataPropertyName属性设置为相应的DataTable 列名称。在这种情况下,您还可以自动生成 DGV 列。或者在代码中添加它们,如果需要,指定 DataType。 -
DataRow 有一个简化的构造函数,它使用
object[]作为源。这将是一个字符串数组:你已经拥有了,来自Split()。 -
@haldo CSV 重复。所以它在gridview中显示所有数据。它最初有一个循环,可以将 CSV 中的第一行打印为我取出的标题,因为我已经有了未绑定的列。一个未绑定的列用于描述,另一列用于数据。两个未绑定的列都有自己的标题。因此,Description 可以保存“Address”,Data 可以保存“76 Douglas St Wakecorn”。也就是说,您是说将
Address, Property name, Building, Room作为标题更容易?我希望将所有这些作为 csv 值放在描述的一列中。 -
@Jimi 但我想使用我在设计器中制作的未绑定列作为标题。我怎样才能做到这一点?所以我想将
Address, PropertyName, Building, Room作为值绑定到第一列,将Douglas St Wakecorn, Wakecorn University, C Block, C2.18作为值绑定到第二列。
标签: c# winforms csv datagridview