Frage

Ich versuche, diesen Code zu verwenden, um meine asp.net Menüsteuerung auf eine Sammlung zu binden .. aber sein gibt mir einen Fehler, meine Sammlung jetzt ist IHierarchyEnumerable .. was ich verstehen, warum auch ..

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

gibt es eine Möglichkeit, um dieses ..

War es hilfreich?

Lösung

Die Menüsteuerung erfordert eine Sammlung von IHierarcyData Objekte in einer Sammlung, die implementiert IHierarchicalEnumerable .

Starten Sie mit einem IHierarcyData Klasse, die jede Saite aus dem String gespeichert werden ...

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
}

eine Klasse erstellen, die die Sammlung sein wird ...

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
}

In der Seite, die Sie jetzt das Menü erstellen können ...

 MyMenu pos = new MyMenu();

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

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

Andere Tipps

Sie können versuchen, einen Wrapper wie in diesem MSDN-Artikel writting:

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; 
   } 
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top