当从数据库读取的值带有中文,在展开节点的时候会出现以下错误索引和长度必须引用该字符串内的位置。参数名: length我采用的是:设置PopulateOnDemand为true,子节点动态生成。

解决方案 »

  1.   

    private void BindTree()
        {
            YCSD.BLL.Account_Project bll = new YCSD.BLL.Account_Project();
            DataTable dt = bll.GetList(10,1,"FatherNode = '-1'").Tables[0];
            TreeNode myTreeNode;
            for(int i = 0;i<dt.Rows.Count;i++)
            {
                myTreeNode = new TreeNode();
                myTreeNode.Value = dt.Rows[i]["ProjectID"].ToString();
                myTreeNode.Text = dt.Rows[i]["ProjectID"].ToString()+dt.Rows[i]["ProjectName"].ToString();
                myTreeNode.PopulateOnDemand = true;
                TreeView1.Nodes.Add(myTreeNode);
            }
        }
        protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
        {
            TreeNode newNode;        
            YCSD.BLL.Account_Project bll = new YCSD.BLL.Account_Project();
            DataTable dt = bll.GetList(10, 1, "FatherNode = '" + e.Node.Value + "'").Tables[0];
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                newNode = new TreeNode();
                newNode.Value = dt.Rows[i]["ProjectID"].ToString();
                newNode.Text = dt.Rows[i]["ProjectID"].ToString() + dt.Rows[i]["ProjectName"].ToString();
                //设置PopulateOnDemand为true,确保下面的子节点仍然可以动态生成。
                newNode.PopulateOnDemand = true;
                e.Node.ChildNodes.Add(newNode);
            }
        }
    这是两个方法:对英文和数字,来说没有问题,如果是中文就出现问题了