webForumDet fria alternativet

Visa hierarkisk data i gridview

.NETur .NET

3 svar · 279 visningar · startad av doggelito

Medlem sedan juni 20003 076 inlägg
Frågan#1

Har en hierarkisk IList<Category>:

public class Category
{
        private int id;
        private string name;
        private IList<Category> childCategories;

        public virtual int Id
        {
            get { return id; }
            set { id = value; }
        }

        public virtual string Name
        {
            get { return name; }
            set { name = value; }
        }

        public virtual IList<Category> ChildCategories
        {
            get { return childCategories; }
            set { childCategories = value; }
        }
}

Går det på något finurligt sätt att binda denna till en gridview i "öppet" läge, så att säga?

Ex. om listan ser ut:

Cat 1
     Cat 1.1
          Cat 1.1.1
     Cat 1.2

så vill jag att gridviewn ser ut:
Cat 1
Cat 1.1
Cat 1.1.1
Cat 1.2

Eller måste jag loopa igenom min samling och skapa en ny IList där varje kategori ligger under varann, dvs. inte hierarkisk?

Nån som förstår vad jag menar?! :OO

Medlem sedan jan. 20022 440 inlägg
#2

Inga bekymmer!

public static IList<Item> GetData()
{
	IList<Item> itemList = new List<Item> ();
	for (int i = 0; i < 10; i++)
	{
		Item _item = new Item("item" + i.ToString ());
		for (int j = 0; j < 5; j++)
		{
			Item subItem = new Item("subitem" + j.ToString ());
			_item.SubItems.Add (subItem);
		}
		itemList.Add (_item);
	}
	return itemList;
}

Du kan fortsätta sådär i evinnerlighet egentligen, men rent prestandamässigt /red särskrivning vete tusan om det är så vettigt. Jag har bara försökt med repeaters...

Medlem sedan jan. 20022 440 inlägg
#3

Ursäkta mig, du använder dig av separata listor, då kanske inte min modell är något för dig...

Medlem sedan juni 20003 076 inlägg
#4

Njae, modellen passar nog inte riktigt men tack för tipset ändå! :bire
Det känns som om jag måste skapa en ny lista (tänkte att gridviewn kunda separera själv men det är nog överkurs!)

Så här fick det bli:

    IList<Category> categories = session.CreateCriteria(typeof(Category)).List<Category>();

    IList<Category> list = new List<Category>();
    list.Add(categories[0]);
    list = recursiveAdd(list, categories[0].ChildCategories);

...

    private IList<Category> recursiveAdd(IList<Category> list, IList<Category> category)
    {
        foreach (Category c in category)
        {
            list.Add(c);

            if (c.ChildCategories.Count > 0)
                recursiveAdd(list, c.ChildCategories);
        }

        return list;
    }
138 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)