2011-01-07 17 views
1

Ich habe einige Daten aus einem Kontext zurück. Daten wurden von spCmsCategoriesReadHierarchy gezogen.Füllen Sie ein DataSet mit Context - Entity Framework 4

I müssen nehmen Sie alle Daten aus dem Kontext und füllen Sie mein DataSet. Mein endgültiges Ziel besteht darin, ein TreeView-Steuerelement mit DataSet-Objekt aufzufüllen.

Irgendwelche Ideen? Danke für deine Zeit und Geduld.

+0

gegeben Warum verwenden Sie EF, wenn Sie Datensätze benötigen? Es scheint wie eine Zeitverschwendung. – Will

+0

Werde ich denken, dass Sie Recht haben! Wissen Sie, wie Sie eine TreeView über den Kontext (EF) binden können? danke – GibboK

Antwort

4

Sicher, Sie können die Daten manuell aus dem Objekt in eine Datenzeile innerhalb des Datasets kopieren.

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); 
} 

Wenn Sie nicht explizit die Eigenschaften in die Datenzeile kopieren möchten, können Sie zum Kopieren auch reflection verwenden.

+0

Hallo Brina danke. Wie ich geschrieben habe, besteht meine Idee darin, ein TreeView-Steuerelement mit einem DataSet zu füllen. Weil ich EF 4 verwenden könnte, um TreeView direkt an EF zu binden, ohne ein DataSet zu verwenden? Ich schätze deine Hilfe sehr! Können Sie am Anfang einen Code bereitstellen? – GibboK

+0

Sicher, Sie können immer mit EF-Objekten binden, verwenden Sie die ASP.NET-Strukturansicht? Wenn dies der Fall ist, können Sie die innere Schleife einfach übersetzen, und anstatt ein DataRow-Objekt zu erstellen, erstellen Sie ein TreeNode-Objekt. Wenn ich den Datenquellenansatz verwende, bin ich mir nicht 100% sicher, dass der hierarchische Bindungsansatz funktioniert, aber da jedes EF-Objekt seine Beziehungen als Eigenschaften für diese Entität enthält, könnte man die hierarchische Struktur leicht neu erstellen. –

+0

Danke Brina, ich werde sicher versuchen den Code für andere Referenzen zu veröffentlichen. Vielen Dank für jetzt – GibboK

0

Diese Methode konvertiert eine Liste von Objekten in eine Datentabelle. Es wurde als Antwort auf 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; 
} 
+0

Anstatt nur Code kopieren und hier als Antwort einfügen, wäre es besser, wenn Sie es mehr auf die OP-Frage zugeschnitten. Zum Beispiel hat OP nach einem DataSet gefragt, das eine DataTable zurückgibt. Es wäre auch schön, wenn Sie einen Weg vom OP-Code-Snippet zu dem von Ihnen bereitgestellten Code einbinden würden - zum Beispiel "Ersetzen Sie Ihre' foreach'-Anweisung durch 'CreateDataSet (context.spCmsCategoriesReadHierarchy (n, sl, nn))' '" oder etwas ähnliches. – David

Verwandte Themen