根节点
节点a
a1
a2
...
节点b
b1
b2
...
用其自身的netui:tree标签可以一次性取出来,但因为数据太多,一次性取出所有太耗内存了,速度也太慢!!
所以想实现点击"节点a"才动态加载其子节点a1,a2.....,找了好多树型例子,都是一次性加载的!
有没有能动态加载的,请大家帮忙哈!很急!谢谢
19 个解决方案
#1
自己顶!希望大家帮个忙哈。。。。。。
#2
csdn那个左边的你自己down呀!那不现成的么?
#3
楼上的兄弟,我分不够,你有么?发我一份好不好!十分感谢!
#4
//得到树节点的路径
private string getNodePath(TreeNode tn) {
if ( tn.Parent == null){
return tn.Text;
}
return getNodePath(tn.Parent) + "\\" + tn.Text;
}
//为节点添加子节点
private void AddNode(TreeNode tn, bool isRoot)
{
try
{
//得到选择路径
string strPath = "";
strPath = getNodePath(tn);
//得到该路径的信息
DirectoryInfo dti = new DirectoryInfo(strPath);
DirectoryInfo[] objdti = dti.GetDirectories();
//为节点添加下级节点
for (int i = 0; i < objdti.Length; i++)
{
TreeNode objtn = new TreeNode(objdti[i].ToString());
objtn.ImageIndex = 1;//====
objtn.SelectedImageIndex = 1; //========
tn.Nodes.Add(objtn);
}
}
catch
{
}
}
//
private void Ziyuan_Load(object sender, EventArgs e)
{
string[] str = System.Environment.GetLogicalDrives();
for (int i = 0; i < str.Length; i++) {
TreeNode node = new TreeNode(str[i].ToString());
this.tvwTree.Nodes.Add(node);
AddNode(node,false);
}
lvwList.Columns.Add("文件",150,HorizontalAlignment.Left);
lvwList.Columns.Add("大小", 80, HorizontalAlignment.Right);
lvwList.Columns.Add("时间", 120, HorizontalAlignment.Right);
lvwList.View = View.Details;
//设置图片
this.tvwTree.ImageList = img;
}
//展开节点事件
private void tvwTree_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
//得到当前选择的节点
//TreeNode tn = (TreeNode)e.Node;
TreeNode tn = tvwTree.SelectedNode;
for (int i = 0; i < tn.Nodes.Count; i++) {
AddNode(tn.Nodes[i],false);
}
}
//收起节点事件
private void tvwTree_AfterCollapse(object sender, TreeViewEventArgs e)
{
//得到当前选择的节点
//TreeNode tn = (TreeNode)e.Node;
TreeNode tn = tvwTree.SelectedNode;
for (int i = 0; i < tn.Nodes.Count; i++) {
//清除下一级节点
tn.Nodes[i].Nodes.Clear();
}
}
//当选择一个节点事件
private void tvwTree_AfterSelect(object sender, TreeViewEventArgs e)
{
try
{
//得到当前所选择的节点
TreeNode tn = tvwTree.SelectedNode;
//得到该节点所在路径
string strPath = getNodePath(tn);
//得到给节点下的所有子文件夹
DirectoryInfo dtif = new DirectoryInfo(strPath);
FileInfo[] fi = dtif.GetFiles();
//清空列表框中原来的内容
lvwList.Items.Clear();
//将每一个文件的信息显示到列表框中来
foreach (FileInfo file in fi){
ListViewItem lvwItem = new ListViewItem();
lvwList.SmallImageList = img;
lvwItem.ImageIndex = 1;
//得到文件名
lvwItem.SubItems[0].Text = file.Name;
string str = file.Name;
string[] st = str.Split('.');
string txt = st[st.Length - 1];
Regex rg = new Regex(txt, RegexOptions.IgnoreCase);
if (rg.IsMatch("txt"))
{
setImg(6, lvwItem);
}
//得到文件的大小
lvwItem.SubItems.Add(file.Length.ToString() + "字节");
//得到文件的修改时间
lvwItem.SubItems.Add(file.LastAccessTime.ToLocalTime().ToString());
//添加到列表框
lvwList.Items.Add(lvwItem);
}
}
catch {
return;
}
}
这是我在学winForm 时 做的资源管理器
做得不怎么样,但是我可以谈谈我的思想:
首先,你得构造你的根节点。
然后,当你点击某个根节点时,
你要根据你的根节点查询,该节点下的所有子节点。
如果,某个子节点还有子节点。则显示+号,表示还有子节点。
那么该子节点,又是下面的根节点了。
同此循环调用。不要一下查询所有的节点,那样会死机的。
就是点一下,就显示所有的下级目录。
点击触发。
这就是我的小经验。
希望对兄弟你有 帮助,哥们够意思吧
^_*
#5
帮顶,学习学习!!
#6
谢谢IBM_hoojo!我用的是weblogic页面流开发的,资料太少了,找了好多都没这方面的,菜单树以前也用多dtree树,但加载的数据都很少!没这样的要加载几百万的数据,头疼啊!希望有兄弟能发Java,jsp方面的代码参考参考!说真的,对js不是很熟悉......
#7
当点击一个节点的时候,就去查他的子节点啊,先别考虑树形,就当下拉列表框用
#8
页面加载时就只读一级节点,然后点到一个节点时再去查他的子节点,然后添加到点的这个节点下!
大概算法就是这样了!
大概算法就是这样了!
#9
顶.
#10
自己再顶一下啦,我有点纳闷有人做过这样的树型数据展示么?这样的需求确认让人很郁闷!
#11
太多了吧..一百万条..我一般做树都 是用dtree
#12
我改了一个dtree用ajax实现的,加载页面只加载一个根结点,然后根据父亲结点找到儿子结点。要是需要就联系我
#13
ajax
#14
4楼的顶起你。
#15
我现在能做到根节点下第一级节点的动态显示,也就是我第一次加载只加载“节点a”,“节点b",然后点击"节点a"后再动态加载其子节点,但还是不能任意显示子节点,我用的是标签!不知道还有没有好的办法
#16
几百万条的树形菜单有点牛,从没遇到过..
#17
几百万条的树形菜单~~~ 嘿嘿~~你死定了
#18
呵呵,这么多数据就是一条数据一个信息,估计客户端也受不了。
#19
ext 框架的treepanel是异步刷新的 ,这个很好用
如果不想用ext,用ajax把dtree改改也行
如果不想用ext,用ajax把dtree改改也行
#20
#1
自己顶!希望大家帮个忙哈。。。。。。
#2
csdn那个左边的你自己down呀!那不现成的么?
#3
楼上的兄弟,我分不够,你有么?发我一份好不好!十分感谢!
#4
//得到树节点的路径
private string getNodePath(TreeNode tn) {
if ( tn.Parent == null){
return tn.Text;
}
return getNodePath(tn.Parent) + "\\" + tn.Text;
}
//为节点添加子节点
private void AddNode(TreeNode tn, bool isRoot)
{
try
{
//得到选择路径
string strPath = "";
strPath = getNodePath(tn);
//得到该路径的信息
DirectoryInfo dti = new DirectoryInfo(strPath);
DirectoryInfo[] objdti = dti.GetDirectories();
//为节点添加下级节点
for (int i = 0; i < objdti.Length; i++)
{
TreeNode objtn = new TreeNode(objdti[i].ToString());
objtn.ImageIndex = 1;//====
objtn.SelectedImageIndex = 1; //========
tn.Nodes.Add(objtn);
}
}
catch
{
}
}
//
private void Ziyuan_Load(object sender, EventArgs e)
{
string[] str = System.Environment.GetLogicalDrives();
for (int i = 0; i < str.Length; i++) {
TreeNode node = new TreeNode(str[i].ToString());
this.tvwTree.Nodes.Add(node);
AddNode(node,false);
}
lvwList.Columns.Add("文件",150,HorizontalAlignment.Left);
lvwList.Columns.Add("大小", 80, HorizontalAlignment.Right);
lvwList.Columns.Add("时间", 120, HorizontalAlignment.Right);
lvwList.View = View.Details;
//设置图片
this.tvwTree.ImageList = img;
}
//展开节点事件
private void tvwTree_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
//得到当前选择的节点
//TreeNode tn = (TreeNode)e.Node;
TreeNode tn = tvwTree.SelectedNode;
for (int i = 0; i < tn.Nodes.Count; i++) {
AddNode(tn.Nodes[i],false);
}
}
//收起节点事件
private void tvwTree_AfterCollapse(object sender, TreeViewEventArgs e)
{
//得到当前选择的节点
//TreeNode tn = (TreeNode)e.Node;
TreeNode tn = tvwTree.SelectedNode;
for (int i = 0; i < tn.Nodes.Count; i++) {
//清除下一级节点
tn.Nodes[i].Nodes.Clear();
}
}
//当选择一个节点事件
private void tvwTree_AfterSelect(object sender, TreeViewEventArgs e)
{
try
{
//得到当前所选择的节点
TreeNode tn = tvwTree.SelectedNode;
//得到该节点所在路径
string strPath = getNodePath(tn);
//得到给节点下的所有子文件夹
DirectoryInfo dtif = new DirectoryInfo(strPath);
FileInfo[] fi = dtif.GetFiles();
//清空列表框中原来的内容
lvwList.Items.Clear();
//将每一个文件的信息显示到列表框中来
foreach (FileInfo file in fi){
ListViewItem lvwItem = new ListViewItem();
lvwList.SmallImageList = img;
lvwItem.ImageIndex = 1;
//得到文件名
lvwItem.SubItems[0].Text = file.Name;
string str = file.Name;
string[] st = str.Split('.');
string txt = st[st.Length - 1];
Regex rg = new Regex(txt, RegexOptions.IgnoreCase);
if (rg.IsMatch("txt"))
{
setImg(6, lvwItem);
}
//得到文件的大小
lvwItem.SubItems.Add(file.Length.ToString() + "字节");
//得到文件的修改时间
lvwItem.SubItems.Add(file.LastAccessTime.ToLocalTime().ToString());
//添加到列表框
lvwList.Items.Add(lvwItem);
}
}
catch {
return;
}
}
这是我在学winForm 时 做的资源管理器
做得不怎么样,但是我可以谈谈我的思想:
首先,你得构造你的根节点。
然后,当你点击某个根节点时,
你要根据你的根节点查询,该节点下的所有子节点。
如果,某个子节点还有子节点。则显示+号,表示还有子节点。
那么该子节点,又是下面的根节点了。
同此循环调用。不要一下查询所有的节点,那样会死机的。
就是点一下,就显示所有的下级目录。
点击触发。
这就是我的小经验。
希望对兄弟你有 帮助,哥们够意思吧
^_*
#5
帮顶,学习学习!!
#6
谢谢IBM_hoojo!我用的是weblogic页面流开发的,资料太少了,找了好多都没这方面的,菜单树以前也用多dtree树,但加载的数据都很少!没这样的要加载几百万的数据,头疼啊!希望有兄弟能发Java,jsp方面的代码参考参考!说真的,对js不是很熟悉......
#7
当点击一个节点的时候,就去查他的子节点啊,先别考虑树形,就当下拉列表框用
#8
页面加载时就只读一级节点,然后点到一个节点时再去查他的子节点,然后添加到点的这个节点下!
大概算法就是这样了!
大概算法就是这样了!
#9
顶.
#10
自己再顶一下啦,我有点纳闷有人做过这样的树型数据展示么?这样的需求确认让人很郁闷!
#11
太多了吧..一百万条..我一般做树都 是用dtree
#12
我改了一个dtree用ajax实现的,加载页面只加载一个根结点,然后根据父亲结点找到儿子结点。要是需要就联系我
#13
ajax
#14
4楼的顶起你。
#15
我现在能做到根节点下第一级节点的动态显示,也就是我第一次加载只加载“节点a”,“节点b",然后点击"节点a"后再动态加载其子节点,但还是不能任意显示子节点,我用的是标签!不知道还有没有好的办法
#16
几百万条的树形菜单有点牛,从没遇到过..
#17
几百万条的树形菜单~~~ 嘿嘿~~你死定了
#18
呵呵,这么多数据就是一条数据一个信息,估计客户端也受不了。
#19
ext 框架的treepanel是异步刷新的 ,这个很好用
如果不想用ext,用ajax把dtree改改也行
如果不想用ext,用ajax把dtree改改也行