关闭

“递归”之无限分类处理(一)

标签: 递归无限分类处理id name pid递归之无限分类
658人阅读 评论(0) 收藏 举报
分类:
思路:首先把整个DT拿到(避免多次访问数据库),然后首先加载根目录(classpid为0的),然后处理每个TreeNode,并使递归的方法去将当前TreeNode的子节点添加上去。

一、数据库准备

create table ClassList
(
   classid int identity(1,1) primary key,
   classname nvarchar(100) not null,
   classpid int
)

insert into ClassList(ClassName,ClassPID)
values
('Class1',0),
('Class2',0),
('Class3',0),
('Class4',0),
('Class5',1),
('Class6',1),
('Class7',2),
('Class8',2),
('Class9',3),
('Class1',3)

select * from ClassList
结果:
ClassID ClassName ClassPID
1 Class1 0
2 Class2 0
3 Class3 0
4 Class4 0
5 Class5 1
6 Class6 1
7 Class7 2
8 Class8 2
9 Class9 3
10 Class10 3

二、SQLHelper准备

class SQLHelper
{
   //连接字符串
   public static string constr="server=.;database=test;uid=sa;pwd=123456";

   //执行一条查询语句
   public static DataTable ExecuteQuery(string cmdText,params SqlParameter[] ps)
   {
      DataTable dt = new DataTable();
      using(SqlConnection conn=new SqlConnection(constr))
      {
         using (SqlCommand cmd = new SqlCommand(cmdText, conn))
         {
             using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
             {
                if (ps != null)
                {
                    cmd.Parameters.AddRange(ps);
                }
                sda.Fill(dt);
            }
         }
      }
      return dt;
   }
}


三、BLL准备

class BLL
{
    //拿到整个datatable
    public static DataTable GetClassDT()
    {
        string cmdText = "select * from classlist";
        DataTable dt = SQLHelper.ExecuteQuery(cmdText);
        return dt;
    }

    //整个datatable被保存到dt中
    static DataTable dt = GetClassDT();

    //绑定根
    public static void Bind(TreeView tv)
    {
       DataRow[] drs = dt.Select("classpid=0");
       foreach (DataRow dr in drs)
       {
           TreeNode tn = new TreeNode();
           tn.Text = dr["ClassName"].ToString();
           tn.Tag = Convert.ToInt32(dr["classid"]);
           tv.Nodes.Add(tn);
       }
       foreach (TreeNode pnode in tv.Nodes)
       {
           Bind(pnode);
       }
    }
    
    //绑定子
    public static void Bind(TreeNode pnode)
    {
        DataRow[] drs = dt.Select("classpid="+pnode.Tag);
        foreach(DataRow dr in drs)
        {
            TreeNode tn = new TreeNode();
            tn.Text = dr["classname"].ToString();
            tn.Tag = dr["classid"].ToString();
            pnode.Nodes.Add(tn);
            Bind(tn);
        }
     }
}


四、Form准备
BLL.Bind(treeView1);
最终结果:


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:36543次
    • 积分:693
    • 等级:
    • 排名:千里之外
    • 原创:32篇
    • 转载:7篇
    • 译文:0篇
    • 评论:2条
    最新评论