【问题标题】:Edit dynamic records at runtime在运行时编辑动态记录
【发布时间】:2016-09-08 03:50:02
【问题描述】:

我有一个ASP.NET 应用程序在运行时编辑上传到服务器的文件。

我必须处理CSV 文件,所以我选择了FileHelpers 库。

由于我不知道CSV 的标头是什么,我使用此库在运行时动态创建自定义类,并用标头和记录填充DataTable

然后,应用程序将新列添加到 DataTable 以及为每一行生成的值。

我需要将新值写入CSV 文件,因此我需要在运行时编辑记录而不知道类格式。

这是我到目前为止所做的 sn-p,但如果您能给我一个有关如何执行此操作的提示,我将非常感激 :)

List<object> values = new List<object>();

var classBuilder = new DelimitedClassBuilder("CSVClass", delimiter.ToString(), dataTable);

classBuilder.LastField.FieldOptional = true;

Engine = new FileHelperEngine(classBuilder.CreateRecordClass());

string lastFieldName = classBuilder.LastField.FieldName;
i = 0;
foreach (dynamic record in Engine.ReadFile(filePath))
{
    record.Test = newValues[i]; //This line is working as the new column is named "Test" but if the column name changes, it throws an exception of course

    values.Add(record);

    i++;
}

Engine.WriteFile(filePath, values);

【问题讨论】:

  • 什么是 newValues ?

标签: c# asp.net csv dynamic filehelpers


【解决方案1】:

我终于找到了解决办法。

解决方案是使用CsvEngine 类和他的DataTableToCsv 方法。

对于好奇的人,这里是最终代码:

列表值 = new List();

string header = null;

DataRow row = dataTable.NewRow();

int i = 0;
foreach (var value in newValues)
{
    string newValue = value;

    if (i == 0)
    {

        List<object> headers = valuesDictionnary[0].ToList<Object>();
        int count = 1;
        while (true)

            if (headers.Contains(newValue))
            {
                newValue = value + "_" + count;
                count++;
            }
            else
                break;

        header = newValue;
        dataTable.Columns.Add(newValue);

        foreach(DataColumn column in dataTable.Columns)
        {
            row[column.ColumnName] = column.ColumnName;
        }

        dataTable.Rows.InsertAt(row, 0);
    }

    dataTable.Rows[i][header] = newValue;
    i++;
}

CsvEngine.DataTableToCsv(dataTable, filePath, new CsvOptions("CSVOptions", delimiter, filePath));

dataTable.Rows.RemoveAt(0);

【讨论】:

  • 什么是 CsvEngine ?大会?
猜你喜欢
  • 1970-01-01
  • 2010-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多