首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

无限分层怎么设计数据库

2012-11-08 
无限分层如何设计数据库求高手指导,网站栏目无限分层,应当怎样设计数据库?怎样实现?有没有例子可以参考一

无限分层如何设计数据库
求高手指导,网站栏目无限分层,应当怎样设计数据库?
怎样实现?有没有例子可以参考一下。


[解决办法]

SQL code
id parentid name----------------1  null     根目录2  1        一级a3  2        二级a-14  2        二级a-25  1        一级b6  5        二级b-17  6        三级b-1-18  5        二级b-2...
[解决办法]
预览效果图:
 

详见:http://www.soaspx.com/dotnet/csharp/csharp_20101109_6358.html
 
 
数据库结构:
 
id(int) classname(string) parentid(int) sort(int用于显示与排序)
 
1  家居  0  1
 
2  家电  0  2
 
3  沙发  1  1
 
4  某...  3 1
 
...
 
10 ...红色 4 1
 
 
 
 注:
 
parentid 父节点ID
 
sort 用于隐藏或显示 兼排序功能
 
 
 
前台:
 
 
 

<asp:Repeater ID="rep" runat="server" onitemdatabound="rep_ItemDataBound">
 <HeaderTemplate></HeaderTemplate>
 <ItemTemplate></ItemTemplate>
 <FooterTemplate></FooterTemplate>
 </asp:Repeater>
 
 
 
 
 
后台:
 
 
 
代码 

public partial class 递归2 : System.Web.UI.Page
 {
public List<cmodel> list;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
rules r = new rules();
list = r.getlist();//读取数据库
this.rep.DataSource = list.Where(x => x.parentid == 0).ToList();//LINQ2OBJECT
this.rep.DataBind();
}
}
 
protected void rep_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Header)
{
Literal l = new Literal();
l.ID = "ul";
l.Text="<ul>";
e.Item.Controls.Add(l);
}
else if (e.Item.ItemType == ListItemType.Footer)
{
Literal l = new Literal();
l.ID = "ul2";
l.Text = "</ul>";
e.Item.Controls.Add(l);
}
else if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
int id = (int)DataBinder.Eval(e.Item.DataItem, "id");
Literal li1 = new Literal();
li1.ID = "li1";
li1.Text = "<li>";
e.Item.Controls.Add(li1);
 
Literal name = new Literal();
name.ID = "n";
name.Text = DataBinder.Eval(e.Item.DataItem, "classname").ToString();
e.Item.Controls.Add(name);
List<cmodel> temp = list.Where(x => x.parentid == id).ToList();//LINQ2OBJECT
if (temp.Count > 0)
{
Repeater r = new Repeater();
TemplateBuilder tb = new TemplateBuilder();
tb.AppendLiteralString("");
r.HeaderTemplate = tb;
r.FooterTemplate = tb;
r.ItemTemplate = tb;
r.ItemDataBound += new RepeaterItemEventHandler(rep_ItemDataBound); //递归核心
r.DataSource = temp;
r.DataBind();
e.Item.Controls.Add(r);
}
Literal li2 = new Literal();
li2.ID = "li2";
li2.Text = "</li>";


e.Item.Controls.Add(li2);
}
}
 
}
 

 
 
 
 
使用到的类:
 
代码 

public class rules
 {
DataClasses1DataContext dc = new DataClasses1DataContext();
 
public List<cmodel> getlist()
{
var q = from x in dc.ClassFJ
where x.sort > 0 //用于控制显示隐藏
orderby x.sort //兼职排序功能
select new cmodel
(
x.id,
x.className,
x.parentid
);
return q.ToList<cmodel>();
}
 }
 
public class cmodel
 {
public cmodel(int i,string n,int p)
{
id = i;
classname = n;
parentid = p;
}
public int id { get; set; }
public string classname { get; set; }
public int parentid { get; set; }
 }
 
抛砖引玉,话不多讲。

热点排行