2011-01-07 64 views
1

我有一些從上下文返回的數據。數據已被spCmsCategoriesReadHierarchy拉。使用上下文實體框架填充數據集4

需要從上下文獲取所有數據並填充我的數據集。我的最終目標是使用DataSet對象填充TreeView控件。

任何想法?感謝您的時間和耐心。

using (TestHierarchyEntities context = new TestHierarchyEntities()) 
{ 
    int n = 0; 
    Int16 sl = 1; 
    ObjectParameter nn = new ObjectParameter("nn", typeof(int)); 

    // Create a Data Set where adding the result of context 
    DataSet dataSet = new DataSet("myDataSet"); 

    foreach (CmsCategory categories in context.spCmsCategoriesReadHierarchy(n,sl,nn)) 
    { 
    } 
} 
+0

如果您需要數據集,爲什麼使用EF?似乎浪費時間。 – Will 2011-01-07 14:12:48

+0

我認爲你是對的!你知道如何使用上下文(EF)綁定TreeView嗎?謝謝 – GibboK 2011-01-07 14:16:44

回答

4

當然,您可以手動將數據從對象複製到數據集中的數據行。

DataSet dataSet = new DataSet("myDataSet"); 
dataSet.Tables.Add(new DataTable()); 
//Setup the table columns. 

foreach (CmsCategory categories in context.spCmsCategoriesReadHierarchy(n,sl,nn)) 
{ 
    DataRow row = dataSet.Tables[0].NewRow(); 
    row["A"] = categories.A; 
    row["B"] = categories.B; 

    dataSet.Tables[0].Rows.Add(row); 
} 

如果您不希望將屬性顯式複製到數據行,還可以使用反射來執行復制。

+0

嗨布瑞納謝謝。正如我寫的,我的想法是用DataSet填充TreeView控件。因爲我使用EF 4可以直接綁定到TreeView到EF而不使用任何DataSet?我非常感謝你的幫助!你能提供一段代碼開始嗎? – GibboK 2011-01-07 14:23:48

0

該方法會將對象列表轉換爲數據表。它被給出作爲答案this question.

/// <summary> 
/// Create data table from list. 
/// https://stackoverflow.com/questions/18746064/using-reflection-to-create-a-datatable-from-a-class 
/// </summary> 
public static DataTable CreateDataTable<T>(IEnumerable<T> list) 
{ 
    Type type = typeof(T); 
    var properties = type.GetProperties();  

    DataTable dataTable = new DataTable(); 
    foreach (PropertyInfo info in properties) 
    { 
     dataTable.Columns.Add(new DataColumn(info.Name, Nullable.GetUnderlyingType(info.PropertyType) ?? info.PropertyType)); 
    } 

    foreach (T entity in list) 
    { 
     object[] values = new object[properties.Length]; 
     for (int i = 0; i < properties.Length; i++) 
     { 
      values[i] = properties[i].GetValue(entity); 
     } 

     dataTable.Rows.Add(values); 
    } 

    return dataTable; 
}