문제

이 코드를 사용하여 asp.net 메뉴 컨트롤을 컬렉션에 바인딩하려고합니다.

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

이 주위에 방법이 있습니까 ..

도움이 되었습니까?

해결책

메뉴 컨트롤에는 수집이 필요합니다 iHierarcydata 구현하는 컬렉션의 개체 ihierarchicalEnumerable.

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

다른 팁

이 MSDN 기사와 같이 래퍼를 쓸 수 있습니다.

http://msdn.microsoft.com/en-us/library/system.web.ui.ihierarchicalenumerable.aspx

public class StringHeirarchy : StringCollection,IHierarchyEnumerable
{
   public IHierarchyData GetHierarchyData(object enumeratedItem) 
   {
        return enumeratedItem as IHierarchyData; 
   } 
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top