2013-05-23 13 views
7

In MSDN sagen sie über TreeView-Steuerelement („zu Datenbindung“ Absatz):ASP.NET Bindung TreeView-Steuerelement zu einem Dataset

Das TreeView-Steuerelement auch auf ein XmlDocument Objekt oder einen DataSet gebunden werden kann, Objekt mit Beziehungen. Um an eine dieser Datenquellen zu binden, setzen Sie die DataSource-Eigenschaft des TreeView-Steuerelements auf die Datenquelle und rufen Sie dann die DataBind-Methode auf.

So in einer einfachen WebForms Seite mit nur einem TreeView i schrieb:

 DataSet ds = new DataSet(); 
    DataTable dt = new DataTable("Masters"); 
    ds.Tables.Add(dt); 
    dt.Columns.Add("MasterId", typeof(Int32)); 
    dt.Columns.Add("Name", typeof(String)); 
    DataTable dt1 = new DataTable("Details"); 
    ds.Tables.Add(dt1); 
    dt1.Columns.Add("DetailId", typeof(Int32)); 
    dt1.Columns.Add("MasterId", typeof(Int32)); 
    dt1.Columns.Add("Name", typeof(String)); 

    DataRow rw; 
    DataRow rw1; 
    for (int i = 0; i < 5; i++) 
    { 
     rw=dt.NewRow(); 
     dt.Rows.Add(rw); 
     rw["MasterId"] = i; 
     rw["Name"] = "Master Name " + i.ToString(); 
     for (int j = 0; j < 10; j++) 
     { 
      rw1 = dt1.NewRow(); 
      dt1.Rows.Add(rw1); 
      rw1["DetailId"] = i * 5 + j; 
      rw1["MasterId"] = i; 
      rw1["Name"] = "Detail Name " + j.ToString() + " of Master Name "+ i.ToString(); 
     } 
    } 
    ds.Relations.Add(new DataRelation("Masters_Details",dt.Columns["MasterId"], dt1.Columns["MasterId"])); 
    TreeView1.DataSource = ds; 
    TreeView1.DataBind(); 

Aber in Zeile, wo ich Datasource es Ausnahme auslöst:

HierarchicalDataBoundControl akzeptiert nur Datenquellen, die IHierarchicalDataSource implementieren oder IHierarchischEnumerable.

Ich verstehe, dass dies auftritt, weil DataSet keine solche Schnittstelle implementiert ... also warum sie schreiben, ist es möglich, an ein "DataSet mit Beziehungen" zu binden? Vielen Dank im Voraus

+1

Möglicherweise hilfreich: http://www.codeproject.com/Articles/25753/Binding-the-ASP -NET-TreeView-zu-einem-DataSet-or-a-Ob Obwohl es die Sprache in der Dokumentation nicht erläutert. –

+1

tks Ich las diesen Artikel .... und viele von ihnen, wo TreeView Knoten für Knoten bevölkert hat ... aber der Kernpunkt meiner Frage ist ** warum ** sie sagen, ist auf native Weise möglich. –

+0

In solch einem Fall auf MSDN bewerte ich das Thema normalerweise als nicht hilfreich und gebe dann eine Erklärung meiner Argumentation oder was stattdessen da sein sollte. zB: Wo ist das Beispiel für diesen Fall, was ist das nächste, was dir einfällt? –

Antwort

0

Dieser Code zeigt, wie Sie von einer hierarchischen Tabelle zu einer TreeView gelangen. Hier gibt es nichts raffiniertes, aber ein paar Tricks sind nötig, damit es funktioniert.

Der erste Trick besteht darin, die Datensätze nach ParentID zu sortieren. Wir können keinen Knoten in den Baum einfügen, bis sich der Elternknoten in der Baumstruktur befindet. Dies bedeutet einen speziellen Fall, in dem der Wurzelknoten des Baumes zuerst eingefügt werden muss, da er keinen Elternknoten hat. Hier

ist Beispieldaten:

// Create the DataTable and columns 
DataTable ItemTable = new DataTable("MyTable"); 
ItemTable.Columns.Add("ID"  , typeof(int )); 
ItemTable.Columns.Add("ParentID", typeof(int )); 
ItemTable.Columns.Add("Name" , typeof(String)); 

// add some test data 
ItemTable.Rows.Add(new object[] { 0,-1, "Bill Gates" }); 
ItemTable.Rows.Add(new object[] { 1, 0, "Steve Ballmer" }); 
ItemTable.Rows.Add(new object[] { 3, 1, "Mary Smith" }); 
ItemTable.Rows.Add(new object[] { 2, 0, "Paul Allen" }); 
ItemTable.Rows.Add(new object[] { 4, 2, "Ahmed Jones" }); 
ItemTable.Rows.Add(new object[] { 5, 2, "Wing Lee"  }); 

// Use the Select method to sort the rows by ParentID 
DataRow[] SortedRows; 
SortedRows = ItemTable.Select("", "ParentID"); 

Ich hoffe, dass Sie diese nützlich finden,

+0

Vielen Dank für Ihr Interesse an meiner Frage, aber was Sie geschrieben haben, ist für TreeView Knoten für Knoten ein wenig anders als Verwendung Bindungsfunktion zu füllen. –

+0

Aber in Ihrem Code erhalten Sie unter Fehler HierarchicalDataBoundControl akzeptiert nur Datenquellen, die IHierarchicalDataSource oder IHierarchicalEnumerable implementieren. – CollectMeNow

+0

Ja, aber in [MSDN] (http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.treevieview.aspx) geschrieben sie ist möglich, an ein Dataset zu binden ... warum Haben sie das geschrieben? –

Verwandte Themen