几个小时以来,我一直在使用 C# 中的函数遇到问题。基本上我想用一个文件调用一个函数(在这种情况下是一个 .csv 文件,用 ;
分隔列),并将 .csv 文件中包含的数据作为 DataTable 返回(除了第一行包含标题)。为此,我尝试过:
private DataTable getDataTable(string file)
{
DataTable tbl = new DataTable("Order_proposal_Internal_External");
tbl.Columns.Add(new DataColumn("FileName"));
tbl.Columns.Add(new DataColumn("Supplier"));
tbl.Columns.Add(new DataColumn("Store"));
tbl.Columns.Add(new DataColumn("Item"));
tbl.Columns.Add(new DataColumn("Quantity"));
tbl.Columns.Add(new DataColumn("Delivery_Date"));
string[] lines = System.IO.File.ReadAllLines(file);
lines = lines.Skip(1).ToArray();
foreach (string line in lines)
{
var cols = line.Split(';');
if (cols.Length == 1)
continue;
DataRow dr = tbl.NewRow();
dr[0] = file;
for (int cIndex = 1; cIndex + 1 < tbl.Columns.Count; cIndex++)
{
dr[cIndex + 1] = cols[cIndex];
MessageBox.Show(cols[cIndex]);
}
}
return tbl;
}
在这里我可以看到 MessageBox.Show(cols[cIndex]);
获取所有数据,除了第一行(包含标题,这是有意)。包含 FileName 的第一列不包含在输出中(这是不是的目的)。
当我将其作为一个整体打印出来时,表格本身也是空的。这也在后面的阶段得到证实,我调用了另一个函数,我将这个表用作参数 t
并且:
if (t.Rows == 0)
{
MessageBox.Show("Fails at Point 5");
return;
}
当我运行该程序时,它会打印在第 5 点失败
。
用作函数参数的 .csv 文件具有以下外观:
supplier;store;item;quantity;delivery_date
13;1;411;12.0;20170322
80;1;415;3.0;20170322
有人知道我没掌握什么吗?
最佳答案
tbl.NewRow()
创建新的 TableRow
对象,但不会将其添加到表的 Rows
集合中。它完全按照 jar 头上的说明进行操作,仅此而已。将它添加到 Rows
是一个单独的方法调用。
DataRow dr = tbl.NewRow();
dr[0] = file;
for (int cIndex = 1; cIndex + 1 < tbl.Columns.Count; cIndex++)
{
dr[cIndex + 1] = cols[cIndex];
}
// Now that it's populated, add it to the table.
tb.Rows.Add(dr);
关于c# - 函数返回一个空的 DataTable,但我可以看到正在导入 "individual"个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43055145/