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å!
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;
}
248 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a