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);
            }
}

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

原文地址:https://www.cnblogs.com/KimhillZhang/p/2698774.html