无限极菜单的实现(第6天)
Code
private void MakeCategory(IQueryable<Category> cs, ListItemCollection lic, Stack<bool> flags)
{
int i = 0;
int count = cs.Count();
string prefix = "";
foreach (bool flag in flags)//从最近的一个开始的
{
prefix = (flag ? "┃" : "".PadLeft(3, (char)0xA0)) + prefix;//空3格~0xA0代表空格~
}
foreach (Category c in cs)
{
string text = prefix;
if (i == count - 1)//最后一个
{
text += "┗";
flags.Push(false);
}
else//不是最后一个
{
if (c.Deepth == 0 && i == 0)//深度为0且是第一个,唯一可能使用这个标记的
{
text += "┏";
}
else
{
text += "┣";
}
flags.Push(true);
}
ListItem li = new ListItem(text + c.Category1, c.ID.ToString());
lic.Add(li);
MakeCategory(c.Category3.AsQueryable<Category>(), lic, flags);
flags.Pop();//消除最后位
i++;
}
}
代码还是看的不太懂~~感觉好深奥~继续努力学习~~
private void MakeCategory(IQueryable<Category> cs, ListItemCollection lic, Stack<bool> flags)
{
int i = 0;
int count = cs.Count();
string prefix = "";
foreach (bool flag in flags)//从最近的一个开始的
{
prefix = (flag ? "┃" : "".PadLeft(3, (char)0xA0)) + prefix;//空3格~0xA0代表空格~
}
foreach (Category c in cs)
{
string text = prefix;
if (i == count - 1)//最后一个
{
text += "┗";
flags.Push(false);
}
else//不是最后一个
{
if (c.Deepth == 0 && i == 0)//深度为0且是第一个,唯一可能使用这个标记的
{
text += "┏";
}
else
{
text += "┣";
}
flags.Push(true);
}
ListItem li = new ListItem(text + c.Category1, c.ID.ToString());
lic.Add(li);
MakeCategory(c.Category3.AsQueryable<Category>(), lic, flags);
flags.Pop();//消除最后位
i++;
}
}
本文章如标注为原创,转载时请注明出处!