用的微软的TreeView ,由于节点太多,要求分两次载入数据生成节点。
(1)先载入三层的节点,这个用递归实现了。
(2)现在要在现有的三层的最后一层上面,点击任意一个节点,就展开该节点下面的所有节点。
(3)要求:载入树后需要频繁的点击,所以AutoPostBack必须为false
(1)先载入三层的节点,这个用递归实现了。
(2)现在要在现有的三层的最后一层上面,点击任意一个节点,就展开该节点下面的所有节点。
(3)要求:载入树后需要频繁的点击,所以AutoPostBack必须为false
TO:skytear(),这样老板不同意的,在点击的节点上展开,不能到页面的另外的地方去点展开?
要根据节点判断此节点的下级子节点,你应该先在数据库中实现父子关系.
比如一个记录的ID是1,那么,它的下级节点的父ID应是1,这样你传递1去数据库中求取时,就可以取到所有父ID为1的记录了.如下:
ID 第一节点 父节点ID
1 aa
2 bb 1
3 cc 1
4 dd 2
5 ee 2
6 gg 3
是的,在数据库里面实现了父子关系,如果用递归一次行全部载入节点没问题的。
问题关键还是在这里:根据你的要求,不刷新,只能用xmlhttp方式实现.能不能给了连接,Demo什么的我去看看,这个东西我不会。
再说明一下这里,TreeView的AutoPostBack是false,但是点击节点载入子节点是在数据库里面去取节点的数据的,所以这里肯定要刷新一下的。老板可以接受的。
Public Shared Function Expandnodes(ByVal mnode As node)
If mnode.children>0 Then
mnode.expande=true
Dim nnode As integer=mnode.firstbling
For i = nnode To mnode.lastbling
set mnode = mnode.child(i)
expandenodes(mnode)
Next
End If
End Function
If mnode.children>0 Then
mnode.expande=true
Dim nnode As integer=mnode.child.firstbling
For i = nnode To mnode.child.lastbling
set mnode = mnode.child(i)
expandenodes(mnode)
Next
End If
End Function
//webFileUrl:要读取的页面地址,可带参数
function XmlPost(webFileUrl)
{
var result = "";
var xmlHttp = new ActiveXObject("MSXML2.XMLHTTP");
xmlHttp.open("POST", webFileUrl, false);
xmlHttp.send("");
result = xmlHttp.responseText;
return(result);
}
取到ID后,把它传递给上述的xmlhttp,现在是个参数(指向页面参数),改为传递ID(求取的页面一般是固定的)
比如
function xmlhttp(sid)
{
var webformurl = "xxx.aspx?id=" + sid;
//开始读取上述页面的值
.....
}然后在该页面xxx.aspx页面取到值后,你可以运用xml或是直接response.write写出来,这样,在当前页面的脚本里面就求取到值了.你即可通过脚本方式写到你的树里面去
{
var webformurl = "xxx.aspx?id=" + sid;
//开始读取上述页面的值
.....
}
另外,通过脚步方式写树也没搞清楚。
----------------
微软的TreeView 我没有用过,我都自己写.
上面的XMLHTTP方式取值,假设是到xxx.aspx页面取值,传递的是xxx.aspx?id=4在xxx.aspx页面我这样操作
string id = this.request.querystring("id");
string sql= "select id,name from table where 父ID= " + id;
用此SQL求取到数据集,再循环它创建树
DataTable myTab = 根据SQL取到数据集;
strig mystr = "";
for(int i=0;i<myTab.Rows.Count;i++)
{
//在此循环中,逐一取出数据集中的数据,根据树的格式用HTML语言生成表格或你树的表现形式
//最后就是输出一段HTML语法
mystr += "...";
}//然后输出
this.response.write(mystr);
this.response.end();这样,在脚本取值的地方,就取到了上面输出的语句了.
没有用过微软的TreeView ,不知道它有没有提供一个空的行来容纳获取到的HTML语句.我在自己写的树里面,是在每一个节点之下都生成一个空行(高度为0)
然后用脚本:
document.all("空行单元格ID").innerHTML = 取到的值;
这样,树就出来了.不过我觉得我提供的方法也许不一定适合你.你自己试试看.