111,125
社区成员
发帖
与我相关
我的任务
分享
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);
}
}