现在情况是这样的,有两个表一个城市表City(CityID,CityName),一个站点表Station(StationID,StationName,CityID),两表通过CityID关联。用树型控件TreeView绑定分级,但是现在的问题是站点太多,如果一开始初始化时就把所有的站点绑定到TreeView上程序会很慢,我想只有在单击某个城市展开时才绑定在这个城市中的站点(也就是展开的城市绑定其站点,不展开的只绑定城市不绑定站点)。请大侠给个解决方法啊。急~~

解决方案 »

  1.   

    把CityID放在相关节点的Tag里,点击城市的时候先根据Tag里的ID去数据库查询,然后把结果动态生产子节点放在该城市节点下
      

  2.   

    我曾经用ajax+treeview做了一个   
    这样速度是快了一些 不用ajax也可以,就是每次点击都要刷新页面 很不爽
      

  3.   

    这是没有用ajax的代码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;public partial class Department_DeptList : System.Web.UI.UserControl
    {
        //protected Department_DeptMgr DeptDetail1;    private int _selectedmask = -1;
        public int Selectedmask
        {
            get
            {
                if (_selectedmask == -1)
                    _selectedmask = int.Parse(tvDept.SelectedValue);
                return _selectedmask;
            }
            set
            {
                _selectedmask = value;
            }
        }    protected void Page_Load(object sender, EventArgs e)
        {
            //DeptDetail1 = ((Department_DeptMgr)((PageTemplates_List)this.Page).UserControls[1]);
            if (!Page.IsPostBack)
            {
                chkStaff.Checked = false;
                TreeDataBind();
            }
        }
        public void TreeDataBind()
        {
            tvDept.Nodes.Clear();
            ClassLib.Department rootDept = new ClassLib.Department(1);
            TreeNode root = NewtvDeptNode(rootDept, null);
            BindChildNodes(root);
        }    public void BindChildNodes(TreeNode root)
        {
            root.ChildNodes.Clear();
            ClassLib.Department dept = new ClassLib.Department();
            DataTable dt = dept.GetSubDepts(int.Parse(root.Value));
            foreach (DataRow dr in dt.Rows)
            {
                ClassLib.Department subdept = new ClassLib.Department(int.Parse(dr["DeptMask"].ToString()));
                NewtvDeptNode(subdept, root);
            }
        }    private TreeNode NewtvDeptNode(ClassLib.Department dept, TreeNode node)
        {
            TreeNode item = new TreeNode();
            item.Text = dept.DeptName.ToString();
            item.Value = dept.DeptMask.ToString();
            item.Expanded = false;
            item.SelectAction = TreeNodeSelectAction.SelectExpand;
            if (node == null)
            {
                tvDept.Nodes.Add(item);
            }
            else
                node.ChildNodes.Add(item);
            return item;
        }
        protected void tvDept_TreeNodeExpanded(object sender, TreeNodeEventArgs e)
        {
            TreeNode item = e.Node;
            foreach (TreeNode subitem in item.ChildNodes)
            {
                BindChildNodes(subitem);
            }
        }
        public event System.EventHandler ItemSelected;
        private void OnItemSelected()
        {
            if (ItemSelected != null)
                ItemSelected(this, new EventArgs());
        }    protected void tvDept_SelectedNodeChanged(object sender, EventArgs e)
        {
            _selectedmask = int.Parse(tvDept.SelectedValue);
            this.OnItemSelected();
        }    public void UpdateSelectedTreeNode()
        {
            TreeNode node = new TreeNode();
            node = tvDept.SelectedNode;
            if (node != null)
            {
                BindChildNodes(node);
                node.Expand();
            }
        }    public void UpdateSelectedNodeName(string nodename)
        {
            TreeNode node = new TreeNode();
            node = tvDept.SelectedNode;
            if (node != null)
            {
                node.Text = nodename;
            }
        }    public void UpdateParentNode()
        {
            TreeNode node = new TreeNode();
            node = tvDept.SelectedNode.Parent;
            if (node != null)
            {
                BindChildNodes(node);
                node.Expand();
                tvDept_TreeNodeExpanded(new object(), new TreeNodeEventArgs(node));
                node.Selected = true;
                tvDept_SelectedNodeChanged(new object(), new EventArgs());
            }
        }
    }
      

  4.   

    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="DeptList.ascx.cs" Inherits="Department_DeptList" %><div style="overflow: auto; height: 100%">
        <table cellspacing="0" cellpadding="0" border="0" style="height: 100%; width: 100%;">
            <tr>
                <td style="height: 19px">
                    <asp:Label ID="lblExpandNode" Visible="False" runat="server">0</asp:Label><asp:CheckBox
                        ID="chkStaff" runat="server" AutoPostBack="True" Text="显示部门人数(FTE 人数 /Intern 人数)">
                    </asp:CheckBox></td>
            </tr>
            <tr>
                <td valign="top"><br />
                    <asp:TreeView ID="tvDept" runat="server" ShowLines="True" Width="169px" ExpandDepth="0" NodeIndent="10" OnTreeNodeExpanded="tvDept_TreeNodeExpanded" OnSelectedNodeChanged="tvDept_SelectedNodeChanged" ForeColor="Black">
                        <SelectedNodeStyle BackColor="#E0E0E0" />
                        <RootNodeStyle ForeColor="#0000C0" />
                    </asp:TreeView>
                </td>
            </tr>
        </table>
    </div>
      

  5.   

    用Ajax   实现无刷的   那多好啊 给你个例子   
    数据库:: 
    create   db CREATE   TABLE   [dbo].[tbTree]   ( 
    [ID]   [int]   IDENTITY   (1,   1)   NOT   NULL   , 
    [Context]   [nvarchar]   (50)   COLLATE   Chinese_PRC_CI_AS   NULL   , 
    [ParentID]   [int]   NULL   
    )   ON   [PRIMARY] insert   data SET   IDENTITY_INSERT   tbtree   ON 
    insert   tbtree   (ID,Context,ParentID)     values   (   1, '中国 ',0) 
    insert   tbtree   (ID,Context,ParentID)     values   (   2, '北京 ',11) 
    insert   tbtree   (ID,Context,ParentID)     values   (   3, '天津 ',11) 
    insert   tbtree   (ID,Context,ParentID)     values   (   4, '河北省 ',1) 
    insert   tbtree   (ID,Context,ParentID)     values   (   5, '广东省 ',1) 
    insert   tbtree   (ID,Context,ParentID)     values   (   6, '广州 ',5) 
    insert   tbtree   (ID,Context,ParentID)     values   (   7, '四川省 ',1) 
    insert   tbtree   (ID,Context,ParentID)     values   (   8, '成都 ',7) 
    insert   tbtree   (ID,Context,ParentID)     values   (   9, '深圳 ',5) 
    insert   tbtree   (ID,Context,ParentID)     values   (   10, '石家庄 ',4) 
    insert   tbtree   (ID,Context,ParentID)     values   (   11, '辽宁省 ',1) 
    insert   tbtree   (ID,Context,ParentID)     values   (   12, '大连 ',11) 
    insert   tbtree   (ID,Context,ParentID)     values   (   13, '上海 ',1) 
    insert   tbtree   (ID,Context,ParentID)     values   (   14, '天河软件园 ',6) 
    insert   tbtree   (ID,Context,ParentID)     values   (   15, '汕头 ',5) 
    SET   IDENTITY_INSERT   tbtree   off 
    JS文件: function   TreeView(TvCanvert,id,Text,Url,Image,Target) 

            this.TvCanvert=TvCanvert; 
            this.id=id; 
            this.Text=Text; 
            this.Url=Url; 
            this.Image=Image; 
            this.Target=Target; 

    TreeView.prototype.RootNode=function() 

            var   s= " "; 
    s+= ' <table   border= "0 "   cellpadding= "1 "   cellspacing= "0 "> '; 
    s+= '     <tr> '; 
    s+= '         <td> <img   src= "plus.png "   mk= "ParentDiv_ '+this.id+ ' "   name= "ParentImage "   onclick= "onParentNodeTextClick(this) "   style= "cursor:pointer; "/> </td> '; 
    s+= '         <td> <a   class= "parentTreeNode "   name= "ParentText "   mk= "ParentDiv_ '+this.id+ ' "   onclick= "onParentNodeTextClick(this); "   style= "cursor:pointer; "> '; 
    s+=this.Text; 
    s+= '                 </a> '; 
    s+= '     </td> '; 
    s+= '     </tr> '; 
    s+= '     <tr> '; 
    s+= '         <td> </td> <!--   SPACING   --> '; 
    s+= ' <td> <DIV   id= "ParentDiv_ '+this.id+ ' "   style= "display:none "> '; 
            s+= ' </DIV> </td> '; 
    s+= '     </tr> '; 
    s+= ' </table> '; 
            this.TvCanvert.insertAdjacentHTML( 'beforeEnd ',s); 
    } TreeView.prototype.AddCurrentNode=function(PNode) 

            var   s= " "; 
    s+= ' <table   border= "0 "   cellpadding= "1 "   cellspacing= "0 "> '; 
    s+= '     <tr> '; 
    s+= '         <td> <img   src= "plus.png "   name= "RootImage "   mk= "ParentDiv_ '+this.id+ ' "   onclick= "onParentNodeTextClick(this) "   style= "cursor:pointer; "/> </td> '; 
    s+= '         <td> <a   class= "parentTreeNode "   name= "ParentText "   mk= "ParentDiv_ '+this.id+ ' "   onclick= "onParentNodeTextClick(this); "   style= "cursor:pointer; "> '; 
    s+=this.Text; 
    s+= '                 </a> '; 
    s+= '     </td> '; 
    s+= '     </tr> '; 
    s+= '     <tr> '; 
    s+= '         <td> </td> <!--   SPACING   --> '; 
    s+= ' <td> <DIV   id= "ParentDiv_ '+this.id+ ' "   style= "display:none "> '; 
            s+= ' </DIV> </td> '; 
    s+= '     </tr> '; 
    s+= ' </table> '; 
    var   div=document.getElementById( "ParentDiv_ "+PNode.id); 
            div.insertAdjacentHTML( 'beforeEnd ',s); 

    function   onParentNodeTextClick(obj) 

            var   div=document.getElementById(obj.mk); 
            if(div.style.display== "none ") 
            { 
                    div.style.display= " "; 
                    obj.src= "minus.png "; 
            } 
            else 
            { 
                    div.style.display= "none "; 
                    obj.src= "plus.png "; 
            } 

    前台: 
    <title> Untitled   Page </title> 
            <script   language= "javascript "   src= "js/treedigui.js "> </script> 
    </head> 
    <body> 
            <form   id= "form1 "   runat= "server "> 
            <div   id= "Canvert "> 
            
            </div> 
            <script>      
            var   count=0; 
            function   Addtree(ParentID,node) 
            { 
                  //   debugger; 
                    count++; 
                    var   Canvert=document.getElementById( "Canvert "); 
                    var   ds=treedigui.ds(parseInt(ParentID));                 var   dt=ds.value.Tables[0]; 
                    for(var   i=0;i <dt.Rows.length;i++) 
                    { 
                            if(node==null) 
                            { 
                                  //           debugger; 
                                    var   Rtv=new   TreeView(Canvert, "mytree "+count+ "_ ",dt.Rows[i][ "Context "].toString(), "http:// ", " ", " "); 
                                    Rtv.RootNode(); 
                                    Addtree(dt.Rows[i][ "ID "].toString(),Rtv); 
                            } 
                            else 
                            { 
                                    var   Node1=new   TreeView(Canvert, "mytree "+count+ "_ ",dt.Rows[i][ "Context "].toString(), "http:// ", " ", " "); 
                                  //   debugger; 
                                    Node1.AddCurrentNode(node); 
                                
                                    Addtree(dt.Rows[i][ "ID "].toString(),Node1); 
                            } 
                    } 
            } 
            Addtree(0,null);                     
            </script> 
            </form> 
    </body> 
    </html> 后台: 
    private   void   Page_Load(object   sender,   System.EventArgs   e) 
            { 
                    AjaxPro.Utility.RegisterTypeForAjax(typeof(treedigui)); 
                    //调用递归函数,完成树形结构的生成 
                    //AddTree(0,   (TreeNode)null); 
            } 
            [AjaxPro.AjaxMethod] 
            public   DataSet   ds(int   id) 
            { 
                    //   定义数据库连接 
                    SqlConnection   CN   =   new   SqlConnection(); 
                  
                            //初始化连接字符串 
                            CN.ConnectionString   =   "data   source=.;initial   catalog=michael;user   id=sa;Password=43464616; ";                         SqlDataAdapter   adp   =   new   SqlDataAdapter( "select   *   from   tbTree   where   ParentID= "+id,   CN); 
                            DataSet   ds   =   new   DataSet(); 
                            adp.Fill(ds); 
                            //this.ViewState[ "ds "]   =   ds; 
                    return   ds; 
            } 
    引用   AjaxPro.2.dll       这样就可以实现了