• asp.net操作treeview


    小弟使用了非常笨拙的写法,有高手们请指点思路,让小弟学习学习,拜托了。。。

    加载树 -- 使用递归写法 

    protected void LoadChannel()
            {
                DataTable dt = bllChannel.GetList();

                DataRow[] parent = dt.Select(" ParentId=0");
                foreach (DataRow parentRow in parent)
                {
                    TreeNode node = new TreeNode(parentRow["Title"].ToString(), parentRow["Id"].ToString());
                    node.ToolTip = parentRow["Title"].ToString() + "=>" + parentRow["Id"].ToString();//这里是为了用 js获取节点的文本、值---写法感觉很土
                    BindTree(dt, node, parentRow["Id"].ToString());
                    TreeView1.Nodes.Add(node);
                }
            }
            void BindTree(DataTable dt, TreeNode node, string parentId)
            {
                DataRow[] row = dt.Select(" ParentId=" + parentId);
                foreach (DataRow r in row)
                {
                    TreeNode n = new TreeNode(r["Title"].ToString(), r["Id"].ToString());
                    n.ToolTip = r["Title"].ToString() + "=>" + r["Id"].ToString();
                    node.ChildNodes.Add(n);
                    BindTree(dt, n, r["Id"].ToString());
                }
            }

    js 获取选中节点的值,分别放入两个数组

    var textArr = new Array();
    var valueArr = new Array();
     $("input[type='checkbox']:checked").each(function () {
            var tv = $(this).attr("title").split("=>"); //就是上面很土的tooltip值
            textArr.push(tv[0]);
            valueArr.push(tv[1]);
    });

    //使用join把数组转成字符串,以“||”分隔,并分别填入两个文本域

    $get("cataNam").setAttribute("value", textArr.join("||"));
    $get("cataId").setAttribute("value", valueArr.join("||"));

    //加载时,使用递归遍历树把符合的值选中

    string[] cataIdArray=row["CategoryId"].ToString().Split(new string[]{"||"}, StringSplitOptions.RemoveEmptyEntries);//把刚才插入数据库的值分隔
    checkNode(TreeView1.Nodes, cataIdArray);

    //递归方法

     void checkNode(TreeNodeCollection tnodes, string[] cataIdArray)
    {
                foreach (TreeNode tn in tnodes)
                {
                    for (int i = 0; i < cataIdArray.Length; i++)
                    {
                        if (tn.Value == cataIdArray.GetValue(i).ToString())
                        {
                            tn.Checked = true;
                        }
                    }
                    checkNode(tn.ChildNodes, cataIdArray);
                }
    }

      恳求高手们帮小弟指点指点,因为要是数据量多的话我怕会吃不消。。。。

  • 相关阅读:
    BZOJ 3189. [Coci2011]Slika
    BZOJ3188. [Coci 2011]Upit
    P4304 [TJOI2013]攻击装置
    P3966 [TJOI2013]单词
    P3964 [TJOI2013]松鼠聚会
    BZOJ 3157: 国王奇遇记
    设计模式--策略模式
    SSM整合步骤
    Mybatis笔记二
    Java调用WebService之Axis实现
  • 原文地址:https://www.cnblogs.com/KimhillZhang/p/2698774.html
Copyright © 2020-2023  润新知