我想问一个问题,就是我有一个TreeView控件其中CheckBox已经可以实现联动操作.我现在想让它有编辑功能.也就是说我想读进来一个字符串(1,2,43,44,3,49,4,53)和数中节点的Value 数值进行比较.如果两个数值相等,那么就让其对应勾选的副选框被选中.其中数型控件读取数据是这样的
       public void LoadData(String strNodeValue)        
        {
        TreeView1.Nodes.Clear();        DataTable DT = new DataTable();
        Manageuse M = new Manageuse();        M.FileID = 0;        DT = M.TreeView1DataBind();        foreach (DataRow treeRowRoot in DT.Rows)
        {
            TreeNode rootNode = new TreeNode();            rootNode.Text = treeRowRoot["FilesName"].ToString();
            rootNode.Value = treeRowRoot["FileID"].ToString();            TreeView1.Nodes.Add(rootNode);            int pid = int.Parse(treeRowRoot["FileID"].ToString());            CreateNode(rootNode, pid);
        }        TreeNode tnCurrentNode = TreeView1.FindNode(strNodeValue);        if (tnCurrentNode != null)
        {
            //获得焦点
            tnCurrentNode.Select();
            TreeNode tmp = tnCurrentNode;            tmp.ExpandAll();
            while (tmp.Parent != null)
            {
                tmp = tmp.Parent;
                tmp.ExpandAll();
            }
        }
    }    public void CreateNode(TreeNode parentnode, int preID)
    {
        DataTable DT = new DataTable();
        Manageuse M = new Manageuse();        M.FileID = preID;        DT = M.TreeView1DataBind();        foreach (DataRow rw in DT.Rows)
        {
            TreeNode childnode = new TreeNode();
            childnode.Text = rw["FilesName"].ToString();
            childnode.Value = rw["FileID"].ToString();            parentnode.ChildNodes.Add(childnode);            int pid = int.Parse(rw["FileID"].ToString());
            CreateNode(childnode, pid);
        }
    }
我应该怎么做.另有Q币相赠

解决方案 »

  1.   

    protected void Page_Load(object sender, EventArgs e)
        {
            string strNodeValue = "1,2,43,44,3,49,4,53";
            if (!IsPostBack) LoadData(strNodeValue);
        }
        public void LoadData(String strNodeValue)
        {
            strNodeValue = "," + strNodeValue + ",";
            TreeView1.Nodes.Clear();        DataTable DT = new DataTable();
            #region 模拟一些测试数据
            //注:数据从数据读取一次就够了,没必要在递归调用中多次读取-这样性能太低
            DT.Columns.Add("FilesName");
            DT.Columns.Add("FileID");
            DT.Columns.Add("PreID");
            DT.Rows.Add(new object[] {"aaaaa",1,0 });
            DT.Rows.Add(new object[] { "bbbbb", 2, 0 });
            DT.Rows.Add(new object[] { "ccccc", 3, 0 });
            DT.Rows.Add(new object[] { "eeeee", 4, 0 });
            DT.Rows.Add(new object[] { "fffff", 5, 0 });
            DT.Rows.Add(new object[] { "ggggg", 6, 10 });
            DT.Rows.Add(new object[] { "hhhhh", 7, 1 });
            DT.Rows.Add(new object[] { "iiiii", 8, 1 });
            DT.Rows.Add(new object[] { "jjjjj", 9, 3 });
            DT.Rows.Add(new object[] { "kkkkk", 10, 2 });
            DT.Rows.Add(new object[] { "llllll", 11, 10 });
            DT.Rows.Add(new object[] { "mmmmmm", 43, 2 });
            DT.Rows.Add(new object[] { "nnnnnn", 44, 2 });
            DT.Rows.Add(new object[] { "oooooo", 53, 4 });
            DT.AcceptChanges();
            #endregion        DataRow[] rows = DT.Select("[preID]=0");
            foreach (DataRow treeRowRoot in rows)
            {
                TreeNode rootNode = new TreeNode();            rootNode.Text = treeRowRoot["FilesName"].ToString();
                rootNode.Value = treeRowRoot["FileID"].ToString();            TreeView1.Nodes.Add(rootNode);
                int pid = int.Parse(treeRowRoot["FileID"].ToString());
                DT.Rows.Remove(treeRowRoot);            if (strNodeValue.IndexOf("," + pid.ToString() + ",") > -1)
                    rootNode.Checked = true;            CreateNode(rootNode, pid, DT, strNodeValue);
            }        
        }    public void CreateNode(TreeNode parentnode, int preID, DataTable DT, string strNodeValue)
        {
            DataRow[] rows = DT.Select("[preID]='"+preID.ToString()+"'");
            foreach (DataRow rw in rows)
            {
                TreeNode childnode = new TreeNode();
                childnode.Text = rw["FilesName"].ToString();
                childnode.Value = rw["FileID"].ToString();            parentnode.ChildNodes.Add(childnode);
                int pid = int.Parse(rw["FileID"].ToString());
                DT.Rows.Remove(rw);            if (strNodeValue.IndexOf("," + pid.ToString() + ",") > -1)
                {
                    childnode.Parent.Expand();
                    childnode.Checked = true;
                }            CreateNode(childnode, pid, DT, strNodeValue);
            }
        }