2017-07-18 17 views
1

私はajaxのポストコールから得たJSONオブジェクトを持っています。これを以下のようなCustomclassオブジェクトのリストにマッピングしています。リストオブジェクトをデータテーブルに変換できません

[ObjectFilter(Param = "postdata", RootType = typeof(List<ExportToExcel8020>))] 
     public void ExportToExcel(List<ExportToExcel8020> text) 

{ 
    //List<ExportToExcel8020> rm = text.AsEnumerable().ToList(); 
    //DataTable UserDt = rm .ToDataTable(); 
    DataTable UserDt = text.ToDataTable(); 
} 

これは

enter image description here

、私のリストオブジェクトがどのように見えるかである今、私はこのgeneric list object iは、以下の方法を使用することにより、これを行うにしようとしていますdatatable、 に変換することにしたいです。しかし、私は

「System.Collections.Generic.List < ... Domain.Common.ExportToExcel8020>」「ToDataTable」と拡張子のないメソッドの定義が含まれていません「ToDataTable」受諾というエラーを取得しますタイプの最初の引数...

「System.Collections.Generic.List < ... Domain.Common.ExportToExcel8020>」(あなたがusingディレクティブまたはアセンブリ参照が不足している?)

見つかりませんでした
public static DataTable ToDataTable<T>(List<T> items) 
     { 
      DataTable dataTable = new DataTable(typeof(T).Name); 

      //Get all the properties 
      PropertyInfo[] Props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance); 
      foreach (PropertyInfo prop in Props) 
      { 
       //Setting column names as Property names 
       dataTable.Columns.Add(prop.Name); 
      } 
      foreach (T item in items) 
      { 
       var values = new object[Props.Length]; 
       for (int i = 0; i < Props.Length; i++) 
       { 
        //inserting property values to datatable rows 
        values[i] = Props[i].GetValue(item, null); 
       } 
       dataTable.Rows.Add(values); 
      } 
      //put a breakpoint here and check datatable 
      return dataTable; 
     } 

私がdatatableとしてそれを必要とする理由はopenxmlを使用し、excelファイルをエクスポートすることです。

私のコードに何か問題がありますか?または私のapporach自体が間違っていますか?

+2

拡張メソッドを作成しようとしているようです。 'public static DataTable ToDataTable (このリストアイテム)'を実行する必要があります。 –

答えて

3

これは、拡張メソッドを作成しようとしているようです。メソッドシグネチャは最初のパラメータのキーワードとしてthisを持つ必要があります。このパラメータは、拡張する型を指定します(拡張メソッドが呼び出されたときにオブジェクトのインスタンスに渡されます)。メソッドシグニチャとして

public static DataTable ToDataTable<T>(this List<T> items) 

を試してください。

+1

ありがとう@skintkingle、それは働いた。もう少し情報を追加したいと思います。このメソッドは、拡張メソッドであるため、静的クラスでも記述する必要があります。 –

関連する問題