2013-05-23 12 views
7

W MSDN mówią o kontroli TreeView ("Wiązanie do danych" akapit):Binding ASP.NET TreeView formantu do zestawu danych

Kontrola TreeView może być także zobowiązany do obiektu XmlDocument lub DataSet obiekt z relacjami. Aby połączyć się z jednym z tych źródeł danych, ustaw właściwość DataSource kontrolki TreeView na źródło danych , a następnie wywołaj metodę DataBind.

Więc na stronie proste WebForms tylko z TreeView I napisał:

 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(); 

Ale w kolejce, gdzie mogę ustawić DataSource zgłasza wyjątek:

tylko HierarchicalDataBoundControl akceptuje źródeł danych, które implementują IHierarchicalDataSource lub IHierarchicalEnumerable.

Zrozumiałem, że to się dzieje, ponieważ DataSet nie implementuje takiego interfejsu ... więc dlaczego napisano, że można powiązać z "DataSet with relations"? Z góry dziękuję

+1

Być może pomocne: http://www.codeproject.com/Articles/25753/Binding-the-ASP -NET-TreeView-a-DataSet-or-an-Ob Chociaż nie wyjaśnia języka w dokumentacji. –

+1

tks czytałem ten artykuł ... i wiele z nich, gdzie TreeView zapełnił węzeł po węźle ... ale kluczowym punktem mojego pytania jest ** dlaczego ** mówią, że jest to możliwe w natywny sposób. –

+0

W takim przypadku w witrynie MSDN zazwyczaj oceniam ten temat jako nieprzydatny, a następnie przedstawiam wyjaśnienie mojego rozumowania lub tego, co powinno tam być. czyli: gdzie jest przykład dla tego przypadku, jaki jest najbliższy. –

Odpowiedz

0

Ten kod pokazuje, jak przejść z tabeli hierarchicznej do TreeView. Nie ma tu nic wyrafinowanego, ale potrzeba kilku sztuczek, aby to zadziałało.

Pierwsza sztuczka polega na sortowaniu rekordów według ParentID. Nie możemy wstawić węzła do drzewa, dopóki jego węzeł nadrzędny nie znajduje się w drzewie. Oznacza to specjalny przypadek, w którym węzeł główny drzewa musi zostać wstawiony jako pierwszy, ponieważ nie ma elementu macierzystego.

Oto przykładowe dane:

// 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"); 

Mam nadzieję, że to przydatne,

+0

Dziękuję za zainteresowanie moim pytaniem, ale to, co napisałeś, jest przeznaczone do zapełniania węzła TreeView przez węzeł nieco różniące się od funkcji wiązania. –

+0

Ale w twoim kodzie dostałeś poniżej błędu HierarchicalDataBoundControl akceptuje tylko źródła danych, które implementują IHierarchicalDataSource lub IHierarchicalEnumerable. – CollectMeNow

+0

Tak, ale w [MSDN] (http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.treeview.aspx), które napisali, można powiązać z zestawem danych ... dlaczego czy to napisali? –

Powiązane problemy