现在情况是这样的,有两个表一个城市表City(CityID,CityName),一个站点表Station(StationID,StationName,CityID),两表通过CityID关联。用树型控件TreeView绑定分级,但是现在的问题是站点太多,如果一开始初始化时就把所有的站点绑定到TreeView上程序会很慢,我想只有在单击某个城市展开时才绑定在这个城市中的站点(也就是展开的城市绑定其站点,不展开的只绑定城市不绑定站点)。请大侠给个解决方法啊。急~~
调试欢乐多
这样速度是快了一些 不用ajax也可以,就是每次点击都要刷新页面 很不爽
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());
}
}
}
<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>
数据库::
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 这样就可以实现了