c# - 函数返回一个空的 DataTable,但我可以看到正在导入 "individual"个元素

标签 c# arrays string

几个小时以来,我一直在使用 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/

相关文章:

java - 如何使用 JNA 将 java 原始数组传递给 C dll?

string - 如何将字符串拆分为变量/参数以传递给另一个脚本?

c# - WPF 中的网格表

c# - 在 Chrome 中更新谷歌翻译 cookie 时出现问题

java - array.remove() 给出 IndexOutOfBoundsException

c - 理解数组和函数

java - 将第一个单词移到句子的末尾?

Python 类型错误 : not enough arguments for format string

c# - 从列表中的所有项目中获取特定属性

c# - 错误 :RESTORE cannot process database 'Test_DB' because it is in use by this session