2017-10-20 85 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>