repeater 嵌套
我现在想要实现一个三级嵌套的功能。数据库的表分别是bigclass,smallclass,littleclass-----------------------------...
我现在想要实现一个三级嵌套的功能。
数据库的表分别是bigclass,smallclass,littleclass
------------------------------------------------
表结构如下:
bigclass (bigclassid,bigclassname)
smallclass (smallclassid,smallclassname,bigclassid)
littleclass (littleclassid,littleclassname,smallclassid)
------------------------------------------------
大致效果如下:
----------------------------
服装类
|--新款服装
|----男式
|----女式
|--流行服装
|----男式
|----女式
电子产品类
|--MP3区
|----蓝魔系列
|----爱国者系列
|--笔计本电脑区
|----IBM系列
|----HP系列
|----联想系列
-------------------------------------
大致就是这种效果,我目前用的是Repeater的Relations.Add()来做的,可这种方法我只会将两个表做成关联,现在是三个表啊,该怎么来实现?
请各位大侠指点,不用Repeater也行,其它方法也行,只能效率高,功能能实现就行,最好能详细一点。 展开
数据库的表分别是bigclass,smallclass,littleclass
------------------------------------------------
表结构如下:
bigclass (bigclassid,bigclassname)
smallclass (smallclassid,smallclassname,bigclassid)
littleclass (littleclassid,littleclassname,smallclassid)
------------------------------------------------
大致效果如下:
----------------------------
服装类
|--新款服装
|----男式
|----女式
|--流行服装
|----男式
|----女式
电子产品类
|--MP3区
|----蓝魔系列
|----爱国者系列
|--笔计本电脑区
|----IBM系列
|----HP系列
|----联想系列
-------------------------------------
大致就是这种效果,我目前用的是Repeater的Relations.Add()来做的,可这种方法我只会将两个表做成关联,现在是三个表啊,该怎么来实现?
请各位大侠指点,不用Repeater也行,其它方法也行,只能效率高,功能能实现就行,最好能详细一点。 展开
3个回答
展开全部
我个人觉得,像这种动态树型的结构的东西最好是用TreeView控件来做,这个控件在Microsoft.Web.UI.WebControls中
使用如下:
页面:
先注册
<%@ Register TagPrefix="iewc" Namespace="Microsoft.Web.UI.WebControls" Assembly="Microsoft.Web.UI.WebControls, Version=1.0.2.226, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
接下来:
<iewc:treeview id="TreeView1" runat="server"></iewc:treeview>
代码部分:
声明:
protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
绑定:放在page_load里
bindtree(TreeView1.Nodes);
以下三个实现,本来可以写成一个函数,为了便于你理解我分成三个,原理是一样的.
private void bindtree(TreeNodeCollection Nds)
{
string sql="select * from bigclass"
DataSet ds=getDataset(sql);//获取DataSet
DataView dv=ds.Tables[0].DefaultView;
TreeNode tn;
string bigclassid;
foreach(DataRowView dr in dv)
{
bigclassid=dr["bigclassid"].ToString();//当前ID
if (strID!="")
{
tn=new TreeNode();
tn.ID=dr["bigclassid"].ToString();
tn.Text=dr["bigclassname"].ToString();
tn.Expanded=true;//是否展开
Nds.Add(tn);
bindtree1(Nds[Nds.Count-1].Nodes,bigclassid);//绑定二级
}
}
}
private void bindtree1(TreeNodeCollection Nds , string bigclassid)
{
string sql="select * from smallclass where bigclassid="+bigclassid;
DataSet ds=getDataset(sql);//获取DataSet
DataView dv=ds.Tables[0].DefaultView;
TreeNode tn;
string smallclassid;
foreach(DataRowView dr in dv)
{
smallclassid=dr["smallclassid"].ToString();//当前ID
if (smallclassid!="")
{
tn=new TreeNode();
tn.ID=dr["smallclassid"].ToString();
tn.Text=dr["smallclassname"].ToString();
tn.NavigateUrl=dr["字段3"].ToString(); //如果有链接
//tn.Expanded=true;//是否展开
Nds.Add(tn);
bindtree2(Nds[Nds.Count-1].Nodes,smallclassid);//取三级
}
}
}
private void bindtree2(TreeNodeCollection Nds , string smallclassid)
{
string sql="select * from littleclass where smallclassid="+smallclassid;
DataSet ds=getDataset(sql);//获取DataSet
DataView dv=ds.Tables[0].DefaultView;
TreeNode tn;
string littleclassid;
foreach(DataRowView dr in dv)
{
littleclassid=dr["littleclassid"].ToString();//当前ID
if (smallclassid!="")
{
tn=new TreeNode();
tn.ID=dr["littleclassid"].ToString();
tn.Text=dr["littleclassname"].ToString();
tn.NavigateUrl=dr["字段3"].ToString(); //如果有链接
//tn.Expanded=true;//是否展开
Nds.Add(tn);
//bindtree3(Nds[Nds.Count-1].Nodes,littleclassid);//如果还有下一级
}
}
}
使用如下:
页面:
先注册
<%@ Register TagPrefix="iewc" Namespace="Microsoft.Web.UI.WebControls" Assembly="Microsoft.Web.UI.WebControls, Version=1.0.2.226, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
接下来:
<iewc:treeview id="TreeView1" runat="server"></iewc:treeview>
代码部分:
声明:
protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
绑定:放在page_load里
bindtree(TreeView1.Nodes);
以下三个实现,本来可以写成一个函数,为了便于你理解我分成三个,原理是一样的.
private void bindtree(TreeNodeCollection Nds)
{
string sql="select * from bigclass"
DataSet ds=getDataset(sql);//获取DataSet
DataView dv=ds.Tables[0].DefaultView;
TreeNode tn;
string bigclassid;
foreach(DataRowView dr in dv)
{
bigclassid=dr["bigclassid"].ToString();//当前ID
if (strID!="")
{
tn=new TreeNode();
tn.ID=dr["bigclassid"].ToString();
tn.Text=dr["bigclassname"].ToString();
tn.Expanded=true;//是否展开
Nds.Add(tn);
bindtree1(Nds[Nds.Count-1].Nodes,bigclassid);//绑定二级
}
}
}
private void bindtree1(TreeNodeCollection Nds , string bigclassid)
{
string sql="select * from smallclass where bigclassid="+bigclassid;
DataSet ds=getDataset(sql);//获取DataSet
DataView dv=ds.Tables[0].DefaultView;
TreeNode tn;
string smallclassid;
foreach(DataRowView dr in dv)
{
smallclassid=dr["smallclassid"].ToString();//当前ID
if (smallclassid!="")
{
tn=new TreeNode();
tn.ID=dr["smallclassid"].ToString();
tn.Text=dr["smallclassname"].ToString();
tn.NavigateUrl=dr["字段3"].ToString(); //如果有链接
//tn.Expanded=true;//是否展开
Nds.Add(tn);
bindtree2(Nds[Nds.Count-1].Nodes,smallclassid);//取三级
}
}
}
private void bindtree2(TreeNodeCollection Nds , string smallclassid)
{
string sql="select * from littleclass where smallclassid="+smallclassid;
DataSet ds=getDataset(sql);//获取DataSet
DataView dv=ds.Tables[0].DefaultView;
TreeNode tn;
string littleclassid;
foreach(DataRowView dr in dv)
{
littleclassid=dr["littleclassid"].ToString();//当前ID
if (smallclassid!="")
{
tn=new TreeNode();
tn.ID=dr["littleclassid"].ToString();
tn.Text=dr["littleclassname"].ToString();
tn.NavigateUrl=dr["字段3"].ToString(); //如果有链接
//tn.Expanded=true;//是否展开
Nds.Add(tn);
//bindtree3(Nds[Nds.Count-1].Nodes,littleclassid);//如果还有下一级
}
}
}
展开全部
上面的可能会好一点啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
三级分类以上,推荐使用无限分类的设计
id pid 栏目名
自增 父栏目id,指向 id 顶级栏目id为0 绑定时可以使用递归来实现
id pid 栏目名
自增 父栏目id,指向 id 顶级栏目id为0 绑定时可以使用递归来实现
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询