2017-10-20 41 views

回答

1

不要知道C#是不是我的强项和下方可能无法做到这一点的理想方式。如果你找到更合适的,我非常想听听吧:)


我已经找到了包括基于CSV元数据到我BIML项目最简单的方法是将其加载到C#DataTable然后我在Biml中引用的对象是一个C#变量对象,它与foreach一起很好地遍历行。

假设你知道如何在您的BIML项目C#(直接或通过引用.cs文件的文件中),你可以使用下面的代码:

public static DataTable FlatFileToDataTable(string filePath, char delimiter) 
{ 
    DataTable dt = new DataTable(); 

    using (StreamReader sr = new StreamReader(filePath)) 
    { 
     string[] headers = sr.ReadLine().Split(delimiter); 

     foreach (string header in headers) 
     { 
      dt.Columns.Add(header); 
     } 
     while (!sr.EndOfStream) 
     { 
      string[] rows = sr.ReadLine().Split(delimiter); 
      DataRow dr = dt.NewRow(); 
      for (int i = 0; i < headers.Length; i++) 
      { 
       dr[i] = rows[i]; 
      } 
      dt.Rows.Add(dr); 
     } 
    } 
    return dt; 
} 

我认为,以使用StreamReader您还需要将using System.IO;添加到您的代码文件中。

用法是定义一个DataTable对象,并使用上述的结果填充它,然后使用内BIML代码段引用它:

DataTable YourDataTable = FlatFileToDataTable("<Path to CSV file>",'<Value Delimiter>'); 

... 

<Columns> 
<# foreach(DataRow r in YourDataTable.Rows){ #> 
    <Column Name="<#=r["YourColumnName"]#>" etc /> 
<# } #> 
</Columns>