zoukankan      html  css  js  c++  java
  • C# 树次结构的数据

    public static void CreateTree(TreeView tv)
    { ///获取层次结构的数据
    Tree tree = new Tree();
    DataSet ds = tree.GetCategorys();
    if(ds == null || ds.Tables.Count <= 0 || ds.Tables[0].Rows.Count <= 0) return;

    tv.Nodes.Clear(); ///清空树的所有节点
    ///获取根节点的所有数据
    DataRow[] rootRows = ds.Tables[0].Select("ParentID='0'");
    if(rootRows.Length <= 0) return;
    ///创建根节点,并添加到TreeView控件中
    TreeNode root = new TreeNode();
    root.Text = rootRows[0]["Name"].ToString();
    root.Value = rootRows[0]["ID"].ToString();
    root.SelectAction = TreeNodeSelectAction.Expand;
    tv.Nodes.Add(root);
    ///创建根节点的子节点
    CreateSubNode(root,ds.Tables[0]);
    }

    private static void CreateSubNode(TreeNode parentNode,DataTable dt)
    {
    if(parentNode == null || dt == null) return;
    ///获取当前节点的所有数据
    DataRow[] rows = dt.Select("ParentID='" + parentNode.Value + "'","ShowOrder");
    foreach(DataRow row in rows)
    { ///创建当前节点
    TreeNode node = new TreeNode();
    node.Text = row["Name"].ToString();
    node.Value = row["ID"].ToString();
    node.Expanded = false;
    parentNode.ChildNodes.Add(node);
    ///递规创建当前节点(node)的子节点
    CreateSubNode(node,dt);
    }
    }

    首先Tree应该是一个自定义类, 
    tree.GetCategorys(); 是返回创建这颗树的所有结点,具体怎么定义,怎么来,看用户自己是怎么定义的了

    // 如果没有结点, 就没必要创建树了, 直接返回
    if(ds == null || ds.Tables.Count <= 0 || ds.Tables[0].Rows.Count <= 0) return;

    // 这是要创建的树, 清空相当于进行初始化
    tv.Nodes.Clear(); ///清空树的所有节点

    ///获取根节点的所有数据 (ParentID='0'的为根结点, 刚才说了,所有结点都存放在ds.Tables[0]中)
    DataRow[] rootRows = ds.Tables[0].Select("ParentID='0'");

    //如果没有根结点, 就没必要继续了, 返回
    if(rootRows.Length <= 0) return;

    //创建根节点,并添加到TreeView控件中
    TreeNode root = new TreeNode(); // 这是一个结点对象,此将作为根结点
    // 根结点的显示文本为第一行的Name字段
    root.Text = rootRows[0]["Name"].ToString();
    // 根结点的value值为第一行的ID字段
    root.Value = rootRows[0]["ID"].ToString();
    // 选中这个结点的动作----展开子结点
    root.SelectAction = TreeNodeSelectAction.Expand;
    // 将此结点加到树的第一层次中---因为直接加到树中,才决定了它是根结点
    // 其它的子结点不是直接加到树中, 而是加入根结点中的(此种方法使用了组合
    // 模式, 不明白的话,建议看看这种模式的说明
    tv.Nodes.Add(root);

    //刚才说了, 子结点是加入到根结点的, 这样才能形成树,
    //这个方法是创建子结点,所以参数中要传入根结点
    private static void CreateSubNode(TreeNode parentNode,DataTable dt)
    {
    // 根结点为空,返回
    if(parentNode == null || dt == null) return;

    ///获取当前节点的所有数据 , 根据根结点ID查询根结点下的子结点
    DataRow[] rows = dt.Select("ParentID='" + parentNode.Value + "'","ShowOrder");

    // 循环所有子结点, 一个一个加入到根结点
    foreach(DataRow row in rows)
    {
    ///创建当前节点 , 下面这些跟上面的相似, 不用再说明
    TreeNode node = new TreeNode();
    node.Text = row["Name"].ToString();
    node.Value = row["ID"].ToString();
    node.Expanded = false;
    //将此子结点加入根结点
    parentNode.ChildNodes.Add(node);

    ///递规创建当前节点(node)的子节点
    // 此子结点有可能也有子结点, 所以也要为它添加子结点
    // 此递归的结束条件是完成所有子结点的循环
    CreateSubNode(node,dt);
    }

    }

      private static void CreateSubNode(TreeNode parentNode,DataTable dt)
    {
    foreach(DataRow row in rows) //结束条件控制
    {
    CreateSubNode(node,dt); //函数自己调用自己,这个是递归函数
    }

    }

  • 相关阅读:
    java去掉List中的重复值代码
    jquery 请求jsp传递json数据的方法
    jsp自定义标签分析
    jquery mouseout事件冒泡解决方法
    java split函数 对空的处理
    log4j使用感受
    mysql数据库主外键级联删除脚本RESTRICT --> CASCADE
    jquery 实现层级下拉框联动效果 代码
    JSP图片上传 公共工具类
    Apache和Nginx的对比
  • 原文地址:https://www.cnblogs.com/dullbaby/p/3158041.html
Copyright © 2011-2022 走看看