Einzelnen Beitrag anzeigen

Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#4

AW: [WinForms] Tabelle (Nested Set) in TreeView darstellen

  Alt 16. Jan 2013, 13:28
Iterativ würde könnte es so aussehen:
Code:
var columnIndexes = new
{
  Level = dataTable.Columns.IndexOf("Level"),
  Name = dataTable.Columns.IndexOf("Name"),
};

var treeView = new TreeView();
var nodesByName = new Dictionary<DataRow, TreeNode>();

var numberOfNodes = (from index in Enumerable.Range(0, dataTable.Rows.Count)
                     let row = dataTable.Rows[index]
                     let level = row.Field<int>(columnIndexes.Level)
                     // nehme all rows bis zur vorherigen Zeile, finde den ersten von hinten mit geringerem Level
                     let parentRow = (from t in dataTable.AsEnumerable().Take(index).Reverse()
                                      where t.Field<int>(columnIndexes.Level) < level
                                      select t).FirstOrDefault()
                     let parentNodes = parentRow != null ? nodesByName[parentRow].Nodes : treeView.Nodes
                     select nodesByName[row] = parentNodes.Add(row.Field<string>(columnIndexes.Name))).Count();
Das "Count()" ist nötig damit die Abfrage überhaupt ausgeführt wird. LINQ ist lazy by design.

Voraussetzung ist, dass die Reihenfolge stümmt!
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat