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?
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...
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