سؤال

أحاول استخدام هذا الرمز لربط عنصر التحكم في قائمة asp.net الخاص بي بمجموعة ..لكنه يعطيني خطأً بأن مجموعتي أصبحت الآن IHierarchyEnumerable..الذي أفهم لماذا أيضا..

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

هل هناك طريقة للتغلب على ذلك..

هل كانت مفيدة؟

المحلول

يتطلب التحكم في القائمة مجموعة من IHierarcyData الكائنات في المجموعة التي تنفذ IHierarchicalEnumerable.

ابدأ بفئة IHierarcyData التي ستقوم بتخزين كل سلسلة من StringCollection...

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