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

思路:首先把整个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
结果:
ClassIDClassNameClassPID
1Class10
2Class20
3Class30
4Class40
5Class51
6Class61
7Class72
8Class82
9Class93
10Class103

二、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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值