Discussion:
Hierarchische Daten in einer Datenbank speichern / c#-TreeView
(zu alt für eine Antwort)
Ingo Leiß
2005-06-30 08:14:11 UTC
Permalink
Hi,

gibt es einen schnellen und effizienten Weg, um große Menge hierarchischer
Daten
in einer Datenbank zu speichern um daraus schnell einen TreeView in C# zu
erzeugen?

Grüße,
Ingo
Peter Fleischer
2005-06-30 12:44:51 UTC
Permalink
Ingo Leiß wrote:
...
Post by Ingo Leiß
gibt es einen schnellen und effizienten Weg, um große Menge
hierarchischer Daten
in einer Datenbank zu speichern um daraus schnell einen TreeView in
C# zu erzeugen?
Ingo,
um beliebige Strukturen abzuspeichern und wieder darzustellen, bietet sich
eine Tabelle mit rekursiver Bezugsspalte an. Wenn feste Strukturtiefen
vorliegen, kann das auch über Master-Child-Tabellen dargestellt werden.
Beispiel für beide Technologien habe ich aber nur in VB.NET.

Peter
Harald M. Genauck
2005-06-30 12:46:53 UTC
Permalink
Hallo Peter,
Post by Peter Fleischer
Post by Ingo Leiß
gibt es einen schnellen und effizienten Weg, um große Menge
hierarchischer Daten
in einer Datenbank zu speichern um daraus schnell einen TreeView in
C# zu erzeugen?
um beliebige Strukturen abzuspeichern und wieder darzustellen, bietet
sich eine Tabelle mit rekursiver Bezugsspalte an. Wenn feste
Strukturtiefen vorliegen, kann das auch über Master-Child-Tabellen
dargestellt werden. Beispiel für beide Technologien habe ich aber nur in
VB.NET.
Das interessiert mich auch mal. Wo hast Du die Beispiele?


Viele Grüße

Harald M. Genauck

ABOUT Visual Basic - das Webmagazin
http://www.aboutvb.de
Peter Fleischer
2005-06-30 14:33:56 UTC
Permalink
Harald M. Genauck wrote:
...
Post by Harald M. Genauck
Das interessiert mich auch mal. Wo hast Du die Beispiele?
Harald,
ich habe es mal auf meine HP hochgeladen unter der direkten URL:

http://ddm.xima-redaktion.de/itkb.aspx?ID=165

Falls das Speichern interessiert, könnte ich da auch noch ein Beispiel
bereitstellen.

Peter
Harald M. Genauck
2005-06-30 18:15:51 UTC
Permalink
Hallo Peter,
Post by Peter Fleischer
Post by Harald M. Genauck
Das interessiert mich auch mal. Wo hast Du die Beispiele?
http://ddm.xima-redaktion.de/itkb.aspx?ID=165
Danke schön.
Post by Peter Fleischer
Falls das Speichern interessiert, könnte ich da auch noch ein Beispiel
bereitstellen.
Wenn's nicht zuviel Mühe macht, gerne...

Viele Grüße

Harald M. Genauck

ABOUT Visual Basic - das Webmagazin
http://www.aboutvb.de
Peter Fleischer
2005-07-01 21:07:17 UTC
Permalink
Harald M. Genauck wrote:
...
Post by Harald M. Genauck
Post by Peter Fleischer
Falls das Speichern interessiert, könnte ich da auch noch ein
Beispiel bereitstellen.
Wenn's nicht zuviel Mühe macht, gerne...
Harald,
für den Fall der Speicherung einer rekursiven Tree-Darstellung in einer
Tabelle, die dann als XML-Datei noch physisch abgelegt wird, habe ich den
Beitrag ergänzt. Eine schöne Demo-Lösung für Master-Child-Ablage stelle ich
später bereit.

Peter
Harald M. Genauck
2005-07-01 22:34:51 UTC
Permalink
Hallo Peter,
Post by Peter Fleischer
für den Fall der Speicherung einer rekursiven Tree-Darstellung in einer
Tabelle, die dann als XML-Datei noch physisch abgelegt wird, habe ich den
Beitrag ergänzt. Eine schöne Demo-Lösung für Master-Child-Ablage stelle
ich später bereit.
Danke...

Viele Grüße

Harald M. Genauck

ABOUT Visual Basic - das Webmagazin
http://www.aboutvb.de
Peter Fleischer
2005-07-20 05:55:20 UTC
Permalink
Harald M. Genauck <***@aboutvb.de> wrote:
...
Post by Peter Fleischer
für den Fall der Speicherung einer rekursiven Tree-Darstellung in
einer Tabelle, die dann als XML-Datei noch physisch abgelegt wird,
habe ich den Beitrag ergänzt. Eine schöne Demo-Lösung für
Master-Child-Ablage stelle ich später bereit.
Ich habe das Master-Child-Beispiel noch mit einer Ablage als XML-File
ergänzt, welches die Child-Nodes als eingebettete Knoten enthält und zu
jedem Knoten die Werte aus der dazugehörigen DataRow enthalten sind.

Peter

Ingo Leiß
2005-06-30 13:05:48 UTC
Permalink
Das mit der rekursiven Bezugsspalte klingt interessant, hast du ein paar
Infos für mich wie die Technik funktioniert?
Post by Peter Fleischer
...
Post by Ingo Leiß
gibt es einen schnellen und effizienten Weg, um große Menge
hierarchischer Daten
in einer Datenbank zu speichern um daraus schnell einen TreeView in
C# zu erzeugen?
Ingo,
um beliebige Strukturen abzuspeichern und wieder darzustellen, bietet sich
eine Tabelle mit rekursiver Bezugsspalte an. Wenn feste Strukturtiefen
vorliegen, kann das auch über Master-Child-Tabellen dargestellt werden.
Beispiel für beide Technologien habe ich aber nur in VB.NET.
Peter
Peter Fleischer
2005-06-30 14:34:48 UTC
Permalink
Post by Ingo Leiß
Das mit der rekursiven Bezugsspalte klingt interessant, hast du ein
paar Infos für mich wie die Technik funktioniert?
Ingo,
ganz einfach. Eine Spalte zeigt auf die ID des übergeordneten Knotens.

Peter
Elmar Boye
2005-06-30 15:27:06 UTC
Permalink
Hallo Ingo,
...
Post by Ingo Leiß
gibt es einen schnellen und effizienten Weg, um große Menge
hierarchischer Daten in einer Datenbank zu speichern um
daraus schnell einen TreeView in C# zu erzeugen?
Das mit der rekursiven Bezugsspalte klingt interessant, hast
du ein paar Infos für mich wie die Technik funktioniert?
Die allseits beliebte Northwind enthält in der Employees Tabelle
ein Beispiel.

Der oberste Manager ist da NULL und und bei dessen Mitarbeiter
verweist ReportsTo auf die EmployeeID.
Eine kleines Code-Schnippselunten dran. Wenn Du keine SQL Server
Northwind hast tuts auch die von Access (NWIND.MDB).

Gruss
Elmar

--
private void button1_Click(object sender, System.EventArgs e)
{
string connectionString = System.Configuration.ConfigurationSettings.AppSettings["SqlClient_Northwind"];

DataTable employeeTable = new DataTable("Employees");
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlDataAdapter adapter = new SqlDataAdapter(
"SELECT EmployeeID, ReportsTo, "
+ "LastName + ', ' + FirstName AS Name FROM Employees",
connection))
{
adapter.Fill(employeeTable);
}
connection.Close();
}

BuildTreeView(this.treeView1.Nodes,
employeeTable.Select("ReportsTo IS NULL"));
}

private void BuildTreeView(TreeNodeCollection nodes, DataRow[] rows)
{
foreach(DataRow row in rows)
{
TreeNode node = new TreeNode((string)row["Name"]);
nodes.Add(node);
BuildTreeView(node.Nodes,
row.Table.Select(String.Format("ReportsTo = {0}", row["EmployeeID"])));
}
}
Loading...