我想用treeview建立一个省市的树,数据库表如下:cityID,cityName,fatherID
想请教各位高手,我如何实现动态treeview绑定数据库,谢谢!

解决方案 »

  1.   

    到我的博客上看看吧。。最近刚做了这样的一个例子http://blog.csdn.net/szjstar
    //读取数据库中的数据让其插入到TREEVIEW的节点中,这里是从数据库中读取省和直辖市添加到父节点中然后读取省下的县市添加到父节点下,建立了两张个表一个省的表,一个是县市表 using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Data.SqlClient;
    public partial class main : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                //首先填充第一级阶点
                DataView dv = drv("select * from province");
                foreach (DataRowView datav in dv)
                {//循环数据视图,将对应的值交给一个节点对象,然后添加节点树上,如果有继续添加
                    TreeNode tn = new TreeNode();
                    tn.Text = datav["province"].ToString();
                    tn.Value = datav["proid"].ToString();
                    tn.Expanded = false;
                    this.TreeView1.Nodes.Add(tn);
                    //调用方面填充二级节点
                    AddchildNodes(tn);
                }
            }
            
        }
        private void AddchildNodes(TreeNode tn)
        {//填充二级节点,他需要一级节点的值,所以送一个完整的根节点对象
            int proid = Convert.ToInt32(tn.Value);
            DataView dv = drv("select * from city where proid="+proid+"");                
            foreach (DataRowView datav in dv)
            {//同一级节点一样,循环数据视图,将对应的值交给一个节点对象,然后添加到二级节点树上,如里有继续添加
                TreeNode mtn = new TreeNode();
                mtn.Text = datav["cityname"].ToString();
                mtn.Value = datav["cityid"].ToString();
                mtn.NavigateUrl = "~/main.aspx?proid=" + proid + "";
                tn.ChildNodes.Add(mtn);
            }
        }
        private DataView drv(String query)
        {
            //依据传来的SQL串返回一个数据视图
            //连接数据库的字符串
            //SqlConnection conn = new SqlConnection("server=.;database=数据库名;uid=sa;pwd=;");
           //本连接是用WEB.CONFIG里的APPSETTINGS 
            string conn = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"].ToString();
            SqlDataAdapter ada = new SqlDataAdapter(query, conn);
            DataSet ds = new DataSet();
            ada.Fill(ds, "root");
            return ds.Tables["root"].DefaultView;
        }
        
    }
      

  2.   

    我用一张表实现了,不过用法也跟你的一样
    if (!this.IsPostBack)
            {
                DataView dv = drv("select * from city where fatherID=0");
                foreach (DataRowView datav in dv)
                {
                    TreeNode tn = new TreeNode();
                    tn.Text = datav["cityname"].ToString();
                    tn.Value = datav["cityID"].ToString();
                    TreeView1.Nodes.Add(tn);
                    AddChildNode(tn);
                }
            }
        }
        private DataView drv(string query)
        {
            SqlConnection con = DB.sqlcon();
            SqlDataAdapter sdr = new SqlDataAdapter(query,con);
            DataSet ds = new DataSet();
            sdr.Fill(ds,"city");
            return ds.Tables["city"].DefaultView;
        }    private void AddChildNode(TreeNode tn)
        {
            int fatherID = Convert.ToInt32(tn.Value);
            DataView dv = drv("select * from city where fatherID="+fatherID+"");
            foreach(DataRowView datav in dv)
            {
                TreeNode ctn = new TreeNode();
                ctn.Text = datav["cityname"].ToString();
                ctn.Value = datav["cityID"].ToString();
                tn.ChildNodes.Add(ctn);
            }
        }