在运行时编辑动态记录

问题描述:

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

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

因为我不知道CSV的标题是什么,所以我使用这个库在运行时动态创建一个自定义类,并使用标题和记录填充DataTable

然后,应用程序向DataTable添加一个新列,并为每行生成值。

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

下面是我迄今所做的片断,但如果你可以给我如何执行此一提示,我会很感激:)

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); 

我终于找到了我的方式,通过这种。

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

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

列表值=新列表();

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);