我现在要做一个treeview动态绑定数据库表中的内容,表结构如下: 
s_kmbm(科目编码) i_wdid(网点) i_grade(科目级别) s_bm1(编码1) s_bm2(编码2) s_bm3 s_bm4 s_bm5 
101                0            1              101             null     null  null  null 
10101               1           2              101             01       null  null  null 
102                 1           1              102            null      null  null  null 
10201               1           2              102            01        null  null  null 
其中i_grade是用来判别节点类型的. 
请问各位高手如何实现绑定treeview的功能,实现树形目录树.
s_kmbm值是根据s_bm1,s_bm2,s_bm3,s_bm4,s_bm5这5列的值而来的即下面的简写表达式: 
s_kmbm=s_bm1+s_bm2+s_bm3+s_bm4+s_bm5 
i_grade是int类型,它是判断划分级别的依据.
s_bm1,s_bm2,s_bm3,s_bm4,s_bm5这5列值内容的长度是固定的么? 
比如说s_bm1长度都是3位么1.节点的text显示s_kmbm的值, 
2. i_grade=1时,s_bm2,s_bm3,s_bm4,s_bm5都是null请各位高手帮帮忙!!!!!!

解决方案 »

  1.   

    有关于treeview绑定数据源的问题,我感觉好像天天都有人在问相关的问题。
    记住两点:
    1、利用程序遍历绑定
    2、利用自定义层叠数据源绑定。这个比较复杂点。第1个例子:[code language="C#"]
    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 MySoft.Assist;
    using MySoft.Entity;
    using MySoft.LogicLayer;
    public partial class Management_Menu : Templete
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string strAction = "";
            try
            {
                strAction = Request.QueryString["action"].ToString();
                if (strAction == "exit")
                {
                    Session.Clear();
                    Session.Abandon();
                    string str = "alert(\"成功退出!\");";
                    str += "top.location = top.location;";
                    PageTools.ExecJS(str);
                }
            }
            catch
            {        }
            if (!Page.IsPostBack)
            {
                InitializeTree();
                NewsInfoBL.CreateXmlWebSite();
            }
        }    DataView dvChannel = null;
        private void InitializeTree()
        {
            tv_ChannelInfo.Target = "mainFrame";
            tv_ChannelInfo.ShowExpandCollapse = true;        TreeNode mainnode = null;
            mainnode = new TreeNode();
            mainnode.Text = "网站后台管理系统";
            //mainnode.Target = "";
            mainnode.NavigateUrl = "javascript:void(0)";
            mainnode.Expanded = true;
            mainnode.Value = "0";
            tv_ChannelInfo.Nodes.Add(mainnode);        ChannelInfo info = new ChannelInfo();
            ChannelInfoBL channel = new ChannelInfoBL(info);
            dvChannel = channel.GetChannelInfo().DefaultView;
            InitializeSubNode(mainnode);
            TreeNode subnode = null;        subnode = new TreeNode("页面生成");
            subnode.NavigateUrl = "CreateStaticHTML.aspx";
            mainnode.ChildNodes.Add(subnode);        RoleInfo rinfo = new RoleInfo();
            rinfo.RoleID = this.ManagerRoleID;
            RoleInfoBL role = new RoleInfoBL();
            rinfo = role.GetRoleInfo(rinfo);
            if (rinfo.RoleGrade >1)
            {           
                subnode = new TreeNode("广告管理");
                subnode.NavigateUrl = "ADManagemetn.aspx";
                mainnode.ChildNodes.Add(subnode);            subnode = new TreeNode("友情链接");
                subnode.NavigateUrl = "FrientLink.aspx";
                mainnode.ChildNodes.Add(subnode);
                if (rinfo.RoleGrade > 2)
                {
                    subnode = new TreeNode("栏目管理");
                    subnode.NavigateUrl = "ChannelInfo.aspx";
                    mainnode.ChildNodes.Add(subnode);                subnode = new TreeNode("用户管理");
                    subnode.NavigateUrl = "UserInfo.aspx";
                    mainnode.ChildNodes.Add(subnode);
                    subnode = new TreeNode("用户组管理");
                    subnode.NavigateUrl = "RoleInfo.aspx";
                    mainnode.ChildNodes.Add(subnode);
                }            subnode = new TreeNode("日志维护");
                subnode.NavigateUrl = "LogInfo.aspx";
                mainnode.ChildNodes.Add(subnode);
            }        subnode = new TreeNode("退出登录");
            subnode.Target = "_top";
            subnode.NavigateUrl = "?action=exit";
            mainnode.ChildNodes.Add(subnode);
        }    private void InitializeSubNode(TreeNode ParentNode)
        {
            //dvChannel.RowFilter = "ChannelParentID=" + ParentNode.Value;
            TreeNode SubNode = null;
            foreach (DataRowView dr in dvChannel)
            {
                if ((Convert.ToInt32(dr.Row["ChannelAccess"].ToString())&this.ManagerRoleID)!=this.ManagerRoleID)
                    continue;
                if (Convert.ToString(dr.Row["ChannelExtUrl"]).Length>0)
                    continue;
                if (dr.Row["ChannelParentID"].ToString() != ParentNode.Value)
                    continue;
                SubNode = new TreeNode();
                SubNode.Text = dr.Row["ChannelTitle"].ToString();
                ParentNode.NavigateUrl = "";
                ParentNode.SelectAction = TreeNodeSelectAction.Expand;
                SubNode.NavigateUrl = "NewsList.aspx?ChannelID=" + dr.Row["ChannelID"].ToString();
                SubNode.Value = dr.Row["ChannelID"].ToString();
                InitializeSubNode(SubNode);
                ParentNode.ChildNodes.Add(SubNode);
            }
        }
    }[code]
      

  2.   

    第1个例子, 是以前我给别人写的一个后台里面的代码,除了网站名称外,复制的时候其余一个字没动,可能思想比较落后了,但对于学习treeview学习来说,还是有参考价值的。第2点,利用层叠结构数据库绑定,请参考
    http://sxlfybb.cnblogs.com 里面专门有篇文章说这个的。
      

  3.   

    就目前来说,一般情况下,我都不使用treeview来绑定数据源了,自己输出ul或者dt更好一些。treeview对于一般的美工来说,工作不太好做,直接使用ul或者dt的话,样式表的定义比较灵活一些。
      

  4.   

    i_grade为1的全都作为根节点,然后把i_grade=2且s_bm1等于对应根节点的节点作为其2级子节点......
      

  5.   

    楼上的朋友,我这个数据表结构与通常treeview绑定数据库的表结构不一样.我的这个表结构比较复杂!!!
      

  6.   

    TreeView效率很底而且回发的数据太多,1000个节点有2-3M数据~
    非要用的话可以递归调用生成树,是Coder都会写-_-
      

  7.   

    http://www.cnblogs.com/sxlfybb/archive/2008/03/12/1101417.html我在这儿有个例子,你看看,分段加载目录的。