2009-01-09 66 views
0

我想用這個代碼綁定我的asp.net菜單控件到一個集合..但是它給了我一個錯誤,我的集合現在是IHierarchyEnumerable ..我理解它爲什麼太..綁定ASP.Net菜單控件到集合

StringCollection sc = pos.getAllmembers(); 
    Menu1.DataSource = pos.getAllmembers().GetEnumerator(); 

有沒有解決的辦法..

回答

2

菜單控件需要收集實現IHierarchicalEnumerable的集合中的IHierarcyData對象。

開始將每個字符串存儲從StringCollection一個IHierarcyData類...

public class MyMenuItem : IHierarchyData 
{ 
    public MyMenuItem(string s) 
    { 
     Item = s; 
    } 

    public override string ToString() 
    { 
     return Item.ToString(); 
    } 

    #region IHierarchyData Members 

    public IHierarchicalEnumerable GetChildren() 
    { 
     return null; 
    } 

    public IHierarchyData GetParent() 
    { 
     return null; 
    } 

    public bool HasChildren 
    { 
     get { return false; } 
    } 

    public object Item 
    { 
     get; set; 
    } 

    public string Path 
    { 
     get { return string.Empty; } 
    } 

    public string Type 
    { 
     get { return string.Empty; } 
    } 

    #endregion 
} 

構建一個類,將成爲集...

public class MyMenu : StringCollection, IHierarchicalEnumerable 
{ 
    List<IHierarchyData> _list = new List<IHierarchyData>(); 

    public void Add(StringCollection strings) 
    { 
     foreach (string s in strings) 
     { 
      MyMenuItem i = new MyMenuItem(s); 
      _list.Add(i); 
     } 
    } 

    #region IHierarchicalEnumerable Members 

    public IHierarchyData GetHierarchyData(object enumeratedItem) 
    { 
     return enumeratedItem as IHierarchyData; 
    } 

    #endregion 

    #region IEnumerable Members 

    public System.Collections.IEnumerator GetEnumerator() 
    { 
     return _list.GetEnumerator(); 
    } 

    #endregion 
} 

你可以在頁面現在構建菜單...

MyMenu pos = new MyMenu(); 

StringCollection sc = new StringCollection(); 
sc.Add("First"); 
sc.Add("Second"); 
pos.Add(sc); 

Menu1.DataSource = pos; 
Menu1.DataBind();