TreeView这个控件其实我本来不怎么会用到,今天有一个项目要用到,而且是无限极的分类数据绑定,于是就根据自己以前写过的代码别写出了这个无限极分类的例子,呵呵希望能够对大家有所帮助,本人尽量把注释写的详细一些把,因为有的时候搜问题到别人的博客,写的代码完全看不懂,每个人写代码可能都有一定的习惯,所以一定要多写一些注释让别人看懂!
首先说一下我的数据库结构
Pid 主键自动增长
PartName 分类名称
ParentId 父级ID
相信大家一定都会很熟悉吧,这是无限极分类比较常用的一种设计思路!好了接下来看代码吧,自己认为这个还是很强大的,使用了递归的操作,大大减少了代码量!
///
<summary>
/// 控件绑定父节点
/// </summary>
private void TreeViewBind()
{
DataSet ds = pbll.GetList( "" ); // 数据源读取所有数据
DataView dv = ds.Tables[ 0 ].DefaultView;
dv.RowFilter = " ParentId=0 " ; // 筛选ParentId=0为*分类
TreeView1.ShowCheckBoxes = TreeNodeTypes.All;
foreach (DataRowView drv in dv)
{
TreeNode node = new TreeNode();
node.Text = drv[ " PartName " ].ToString();
node.Value = drv[ " Pid " ].ToString();
node.Expanded = false ;
TreeView1.Nodes.Add(node);
AddReplies(dv, node);
}
}
/// <summary>
/// 递归绑定子节点
/// </summary>
/// <param name="dv"></param>
/// <param name="node"></param>
private void AddReplies(DataView dv, TreeNode node)
{
dv.RowFilter = " ParentId=' " + node.Value + " ' " ;
foreach (DataRowView row in dv)
{
TreeNode replyNode = new TreeNode();
replyNode.Text = row[ " PartName " ].ToString();
replyNode.Value = row[ " Pid " ].ToString();
replyNode.Expanded = false ;
node.ChildNodes.Add(replyNode);
AddReplies(dv, replyNode);
}
}
/// 控件绑定父节点
/// </summary>
private void TreeViewBind()
{
DataSet ds = pbll.GetList( "" ); // 数据源读取所有数据
DataView dv = ds.Tables[ 0 ].DefaultView;
dv.RowFilter = " ParentId=0 " ; // 筛选ParentId=0为*分类
TreeView1.ShowCheckBoxes = TreeNodeTypes.All;
foreach (DataRowView drv in dv)
{
TreeNode node = new TreeNode();
node.Text = drv[ " PartName " ].ToString();
node.Value = drv[ " Pid " ].ToString();
node.Expanded = false ;
TreeView1.Nodes.Add(node);
AddReplies(dv, node);
}
}
/// <summary>
/// 递归绑定子节点
/// </summary>
/// <param name="dv"></param>
/// <param name="node"></param>
private void AddReplies(DataView dv, TreeNode node)
{
dv.RowFilter = " ParentId=' " + node.Value + " ' " ;
foreach (DataRowView row in dv)
{
TreeNode replyNode = new TreeNode();
replyNode.Text = row[ " PartName " ].ToString();
replyNode.Value = row[ " Pid " ].ToString();
replyNode.Expanded = false ;
node.ChildNodes.Add(replyNode);
AddReplies(dv, replyNode);
}
}
好了就是这些了,有不明白的地方可以留言,更多精品免费源码尽在天天源码论坛(www.ttyuanma.com)