怎么生成如下结构的树

caicoko 2008-02-15 05:09:25
无限级树结构


<ul>
<li><a href="?1.0">Item 1.0</a>
<ul>
<li><a href="?1.0.0">Item 1.0.0</a></li>
</ul>
</li>
<li><a href="?1.1">Item 1.1</a></li>
<li><a href="?1.2">Item 1.2</a>
<ul>
<li><a href="?1.2.0">Item 1.2.0</a>
<ul>
<li><a href="?1.2.0.0">Item 1.2.0.0</a></li>
<li><a href="?1.2.0.1">Item 1.2.0.1</a></li>
<li><a href="?1.2.0.2">Item 1.2.0.2</a></li>
</ul>
</li>
<li><a href="?1.2.1">Item 1.2.1</a>
<ul>
<li><a href="?1.2.1.0">Item 1.2.1.0</a></li>
</ul>
</li>
<li><a href="?1.2.2">Item 1.2.2</a>
<ul>
<li><a href="?1.2.2.0">Item 1.2.2.0</a></li>
<li><a href="?1.2.2.1">Item 1.2.2.1</a></li>
<li><a href="?1.2.2.2">Item 1.2.2.2</a></li>
</ul>
</li>
</ul>
</li>
</ul>


数据库结构

id name parentid
1 Item 1.0 0
2 Item 1.2 0
3 Item 1.3 0
4 Item 1.0.0 1
5 Item 1.2.0 2
6 Item 1.2.1 2
7 Item 1.2.2 2
8 Item 1.2.0.0 5
9 Item 1.2.0.1 5
....



先给20分,谁先给出正确答案者在加上100分。



...全文
205 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
caicoko 2008-02-20
  • 打赏
  • 举报
回复
谢谢大家,按照1楼的方法结合7楼给出的实例写出来了,只要能解决问题本人一定不手软,所以本人增加100分送上。
lvjie717 2008-02-18
  • 打赏
  • 举报
回复

/// <summary>
/// 无限级分类绑定树型结构的DropDownList
/// </summary>
/// <param name="ddl">DropDownList控件ID</param>
/// <param name="tbName">分类数据库表名</param>
/// <param name="classID">分类ID</param>
/// <param name="className">分类名</param>
/// <param name="fatherID">父节点ID</param>
public static void BindDdl(System.Web.UI.WebControls.DropDownList ddl,string tbName,string classID,string className,string fatherID)
{
DB db = new DB();
DataTable dt = db.GetDtBySql("select * from " + tbName);
if (dt.Rows.Count > 0)
{
foreach (DataRow row in dt.Rows)
{
if (row[fatherID].ToString().Trim() == "0")//绑定根节点
{
ddl.Items.Add(new System.Web.UI.WebControls.ListItem(row[className].ToString(), row[classID].ToString()));
BindChild(ddl, dt, row[classID].ToString(),classID,className,fatherID,1);
}
}
}
}

private static void BindChild(System.Web.UI.WebControls.DropDownList ddl, DataTable dt, string id, string classID, string className, string fatherID, int length)
{
DataRow[] rows = dt.Select(fatherID + "='" + id + "'", classID);
for (int i = 0; i < rows.Length; i++)
{
ddl.Items.Add(new System.Web.UI.WebControls.ListItem(SpaceLength("┠", length) + rows[i][className].ToString(), rows[i][classID].ToString()));
BindChild(ddl, dt, rows[i][classID].ToString(), classID, className, fatherID,length+1);
}
}

private static string SpaceLength(string str, int i)
{
string space = " ";
for (int k = 0; k < i; k++)
{
if (k == 0)
{
space += str;
}
else
{
space = " " + space;
}
}
return space;
}
yang_kun 2008-02-18
  • 打赏
  • 举报
回复
关注~~~~~
pt1314917 2008-02-18
  • 打赏
  • 举报
回复
上面的template即为表名。楼主修改下就可以了。。
pt1314917 2008-02-18
  • 打赏
  • 举报
回复

private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
bind();
}
}

public void bind()
{
string sql="select * from template a where parentid=0 ";
DataSet ds=databind(sql);
if(ds!=null && ds.Tables["tree"].Rows.Count>0)
{
foreach(DataRow dr in ds.Tables["tree"].Rows)
{
TreeNode tn=new TreeNode();
tn.Text=dr["name"].ToString();
tn.Target=dr["id"].ToString();
TreeView1.Nodes.Add(tn);
addtree(tn.Target,tn);
}
}
}
//数据绑定
private DataSet databind(string sql)
{
SqlConnection conn=new SqlConnection("server=.;database=master;uid=sa;pwd=sa");
SqlDataAdapter da=new SqlDataAdapter(sql,conn);
DataSet ds=new DataSet();
da.Fill(ds,"tree");
return ds;
}
//递归查找并加载子节点
public void addtree(string ParentID,TreeNode pNode)
{
string sql="select * from template where parentid='"+ ParentID +"'";
DataSet ds=databind(sql);
if(ds==null || ds.Tables["tree"].Rows.Count<=0)
return;
else
{
foreach(DataRow dr in ds.Tables["tree"].Rows)
{
TreeNode tn=new TreeNode();
tn.Text=dr["name"].ToString();
tn.Target=dr["id"].ToString();
pNode.Nodes.Add(tn);
addtree(tn.Target,tn);
}
}
}


caicoko 2008-02-18
  • 打赏
  • 举报
回复
楼上的答非所问啊
beijing256 2008-02-16
  • 打赏
  • 举报
回复
caicoko 2008-02-15
  • 打赏
  • 举报
回复
goody9807

这个就是jquery的无限级树,问题在于怎么去生成这棵树
caicoko 2008-02-15
  • 打赏
  • 举报
回复
zdhsnail 我需要代码,给出者100分
goody9807 2008-02-15
  • 打赏
  • 举报
回复
楼主使用jquery的插件创建无限级树吧
奔跑的蜗牛007 2008-02-15
  • 打赏
  • 举报
回复
用递归
1.先把所有数据查出来,放入DATASET中
2.把PARENTID=0的查出来,循环生成第一层的节点
3.写一个方法,参数是父ID,作用是查出此节点的子节点,把查出的结果循环生成节点,在第二步时调用
4.在第三步生成每一个节点,以当前节点ID为参数,递归调用此方法即可

注意生成的格式,除第一层外,其它各层的节点是以<UI>开始的,子节点是<LI>开始的

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧