现在想要做一个分类展示的功能,通过树形结构,mysql数据库。表结构如下,我应该如何做,新手求教。

Arran_chao 2011-12-02 04:43:24
FoodID PID Title

H000 null 荤菜
H001 H000 湘菜
H00101 H001 回锅肉
H00102 H001 剁椒鱼头
H002 H000 川菜
H00201 H002 毛血旺
H00202 H002 川辣火锅
S000 null 素菜
S001 S000 凉拌黄瓜
S002 S000 麻婆豆腐
Y000 null 饮料
Y001 Y000 雪碧
Y002 Y000 果粒橙
...全文
112 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Arran_chao 2011-12-05
  • 打赏
  • 举报
回复
谢谢了。
特别 2011-12-02
  • 打赏
  • 举报
回复

private void Test()
{
//构造数据
DataTable dt = new DataTable();
dt.Columns.Add("FoodID", typeof(string));
dt.Columns.Add("PID", typeof(string));
dt.Columns.Add("Title", typeof(string));

dt.Rows.Add("H000", null, "荤菜");
dt.Rows.Add("H001", "H000", "湘菜");
dt.Rows.Add("H00101", "H001", "回锅肉");
dt.Rows.Add("H00102", "H001", "剁椒鱼头");
dt.Rows.Add("H002", "H000", "川菜");
dt.Rows.Add("H00201", "H002", "毛血旺");
dt.Rows.Add("H00202", "H002", "川辣火锅");
dt.Rows.Add("S000", null, "素菜");
dt.Rows.Add("S001", "S000", "凉拌黄瓜");
dt.Rows.Add("S002", "S000", "麻婆豆腐");
dt.Rows.Add("Y000", null, "饮料");
dt.Rows.Add("Y001", "Y000", "雪碧");
dt.Rows.Add("Y002", "Y000", "果粒橙");

#region 循环

/*大概思路
* PID为null的,表示根结点,直接添加到TreeView的Nodes中去,并删除该行数据
* PID为其他值的,表示为子结点
* 通过TreeView.Nodes的Find方法查找是否存在指定的父结点
* 如果找到,添加到该结点中,并删除该行数据
* 如果不存在,继续处理下一个
*/
while (dt.Rows.Count > 0)
{
for (int i = dt.Rows.Count - 1; i >= 0; i--)
{
if (dt.Rows[i]["pid"] == System.DBNull.Value)
{
this.treeView1.Nodes.Add(dt.Rows[i]["FoodID"].ToString(), dt.Rows[i]["title"].ToString());
dt.Rows.RemoveAt(i);
}
else
{
TreeNode[] nodes = this.treeView1.Nodes.Find(dt.Rows[i]["pid"].ToString(), true);
if (nodes.Length > 0)
{
nodes[0].Nodes.Add(dt.Rows[i]["FoodID"].ToString(), dt.Rows[i]["title"].ToString());
dt.Rows.RemoveAt(i);
}
}
}
}

#endregion

#region 递归

var rootNodes = from row in dt.Rows.Cast<DataRow>()
where row["pid"] == System.DBNull.Value
select row;

foreach (var item in rootNodes)
{
TreeNode node=this.treeView1.Nodes.Add(item["FoodID"].ToString(), item["title"].ToString());
AddChildNode(node, dt);
}

#endregion
}

private void AddChildNode(TreeNode parentNode, DataTable dt)
{
var childnodes = from row in dt.Rows.Cast<DataRow>()
where row["pid"].ToString().Equals(parentNode.Name)
select row;

foreach (var item in childnodes)
{
TreeNode node = parentNode.Nodes.Add(item["FoodID"].ToString(), item["title"].ToString());
AddChildNode(node, dt);
}

}
jsyhello 2011-12-02
  • 打赏
  • 举报
回复
TreeView目录树递归数据源代码
http://blog.csdn.net/jsyhello/article/details/6909415

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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