Forums Neueste Beiträge
 

Lists, typed dataset, data adapters usw.

05/07/2008 - 18:12 von Michaela Meier | Report spam
Hi,

Mir schwirrt grad der Kopf von dem Zeugs, durch das ich mich auf der
Suche nach einer Antwort auf eine simple Frage (so dachte ich) gelesen
habe.

Kann man ein datatable oder typed dataset mit einer Liste verknüpfen?

Ich habe z.B. eine Klasse

class MeineDaten
{
private string a;
public string A{get;set}
usw
}

weil sich damit beim coden viel besser arbeiten làßt.
MeineDaten.A
ist bedienungsfreundlicher als
MeineTabelle.Rows["A"]
und die Zuweisungen (im Code, keine Eingabe des Benutzers) sind auch
wesentlich besser zu kontrollieren.

Jetzt suche ich Infos darüber, ob und wie sich àhnliches mit Hilfe von
dataset/data adaptern machen làßt, wenn die Daten nicht aus einer
bestehenden Datenbank (die Grundlage aller existierenden Beispiele,
scheint's) gezogen werden.

Danke

Michaela
 

Lesen sie die antworten

#1 Frank Dzaebel
05/07/2008 - 19:21 | Warnen spam
Hallo Michaela,

Mir schwirrt grad der Kopf von dem Zeugs, durch das ich mich auf der
Suche nach einer Antwort auf eine simple Frage (so dachte ich) gelesen
habe.
Kann man ein datatable oder typed dataset mit einer Liste verknüpfen?



ja, schon, aber ich erzàhle gleich, warum Du das
evtl. nicht benötigst.


[...]
weil sich damit beim coden viel besser arbeiten làßt.
MeineDaten.A
ist bedienungsfreundlicher als
MeineTabelle.Rows["A"]
und die Zuweisungen (im Code, keine Eingabe des Benutzers) sind auch
wesentlich besser zu kontrollieren.



So sieht das bei einem typisierten DataSet aus:

NorthwindDataSet.OrdersDataTable orders;
NorthwindDataSet.OrdersRow row;
private void Form1_Load(object sender, EventArgs e)
{
this.ordersTableAdapter.Fill(this.northwindDataSet.Orders);
orders = northwindDataSet.Orders; row = orders[0];
DateTime date = row.OrderDate;
string name = row.ShipName;
}

Also genauso komfortabel und man kann sich gar nicht mehr
bei den Datentypen vertuen, weil die automatisch generiert
werden. Zusàtzlich eine ganze Menge nützlicher Methoden.
Bei einer Klasse könntest Du ggf. ein falsches Mapping
erstellen (ohne O/R Mapper).

LINQ (und das 'ADO.NET Entity Framework' im Besonderen) stellt
eine Möglichkeit des automatischen Mappings zur Verfügung.
Das kann auch nicht mit einer Datenbank verbundene Daten
etwa als DataView mappen:




nicht mit einer DB verbundene List in DataTable konvertieren ...



Nun, da gibt es natürlich einiges:

[CodeProject: Casting from a Collection to a Data Table using Generics and
Attributes]
http://www.codeproject.com/KB/cs/coreweb01.aspx

Es gàbe auch einfachere Methoden, hier mal eine,
die (falls z.B. ein parameterloser Konstruktor in der Klasse ist)
über den XmlSerializer geht:


{ // ...
dataGridView1.DataSource = ConvertToDataTable<Person>(personen);
}

public static DataTable ConvertToDataTable<T>(List<T> items)
{
MemoryStream stream = new MemoryStream();
XmlSerializer serializer = new XmlSerializer(typeof(List<T>));
serializer.Serialize(stream, items);
stream.Position = 0; DataSet set = new DataSet();
set.ReadXml(stream); DataTable test = set.Tables[0];
return test;
}

mit der Person-Klasse aus meinem Beispiel:

[Beispiel-Tabelle für das DataGridView]
http://dzaebel.net/DataGridViewBeispiel.htm

[.NET Dutch: How to convert a class to a DataTable object.]
http://ms-dotnet.blogspot.com/2006/...table.html

[.NET 2.0 using C# - Convert generic list to DataTable]
http://www.geeklines.com/pages/topic_view.aspx?id9


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen