2011-01-07 69 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; 
}