Hallo Forum,
ich habe eine Frage zum TreeView.
Meine Datenbank schaut wie folgt aus:
UID CodeName CodeDesc Level MKSub
1 14000000 Produktgruppe 1 1
2 14010000 Prod.Untergru 2 1
3 14010100 Prod.Unt.Gr.10 3 1
4 14010200 Prod.Unt.Gr.20 4 0
5 14010210 Prod.Unt.Gr.21 4 0
6 14010220 Prod.Unt.Gr.22 4 0
7 15010000 Produktgruppe 1 0
8 16010000 Produktgruppe 1 0
Daraus muss ich einen TreeView zusammenbauen anhand der Daten.
Zur Erklärung des Schemas:
UID => Identifier
CodeName => Produktklasse (immer 6 stellen)
CodeDesc => Beschreibung der Gruppe
Level => In welcher Tiefe von CodeName
MKSub => Beschreibt ob es eine Untergruppe gibt.
Habt Ihr ne Idee oder einen Vorschlag wie ich das zusammenbauen kann ?
Gruß
Tom
Hallo tom-cat,
du solltest nach Level sortieren und dann mittels Rekursion den Baum aufbauen. Da gibt es keine Probleme. Rekursionsansätze findest du bei Bedarf zur Genüge im Web.
Wo genau gibt es denn Probleme? Ich kann aus den Daten erstmal nicht erkennen, wo für einen Eintrag steht, welchem Eintrag er untergeordnet sein soll. Es sei denn, die Reihenfolge der Daten spielt dabei eine Rolle...?
Weeks of programming can save you hours of planning
Die Beispieldaten sind mMn. nicht richtig:
Wenn ich aus den ersten 6 Zeilen weiter folge, müsste der CodeName für Zeile sieben nicht 15010000 sonder 15000000 sein und für Zeile 8 nicht 16010000 sondern 16000000.
Wobei ich nicht verstehe was die erste Ziffer bedeutet aber soweit ich das verstehe ist der CodeName der Baum wobei erste und zweite Ebene 0-99 Elemente beinhalten können und die dritte Ebene 0-999.
Ich war so frei dein Beispiel mal in einer kleinen Consolenapp nachzubauen:
static void Main()
{
var strings = new[]
{
new[] {"1", "14000000", "Produktgruppe", "1", "1"},
new[] {"2", "14010000", "Prod.Untergru", "2", "1"},
new[] {"3", "14010100", "Prod.Unt.Gr.10", "3", "1"},
new[] {"4", "14010200", "Prod.Unt.Gr.20", "4", "0"},
new[] {"5", "14010210", "Prod.Unt.Gr.21", "4", "0"},
new[] {"6", "14010220", "Prod.Unt.Gr.22", "4", "0"},
new[] {"2", "14020000", "Prod.Untergru", "2", "1"},
new[] {"3", "14020300", "Prod.Unt.Gr.30", "3", "1"},
new[] {"4", "14020400", "Prod.Unt.Gr.30", "3", "0"},
new[] {"7", "15000000", "Produktgruppe", "1", "0"},
new[] {"8", "16000000", "Produktgruppe", "1", "0"}
};
var x = from firstLevel in GroupLines(strings, 1, 2)
select new
{
Item = firstLevel.First(),
Children = from seconLevel in GroupLines(firstLevel, 3, 2)
select new
{
Item = seconLevel.First(),
Children = from thirdLevel in GroupLines(seconLevel, 5, 3)
select new
{
Item = thirdLevel.First()
}
}
};
foreach (var level1Item in x)
{
Console.WriteLine(level1Item.Item[1]);
foreach (var level2Item in level1Item.Children)
{
Console.WriteLine("\t" + level2Item.Item[1]);
foreach (var level3Item in level2Item.Children)
{
Console.WriteLine("\t\t" + level3Item.Item[1]);
}
}
}
}
private static IEnumerable<IGrouping<int, string[]>> GroupLines(IEnumerable<string[]> strings, int startIndex, int length)
{
return from line in strings
let level = Convert.ToInt32(line[1].Substring(startIndex, length))
where level != 0
group line by level;
}
Lg XXX