关于treeview的高难问题,求救!!分不够可再加!

jlj2002 2003-07-24 08:59:48
想实现以下功能:
由于数据量过大,希望数据不一次取出,而是根据所选中节点动态加载,如:

c:
d:
e:
当点击c:时,动态加载c下所有节点
...全文
35 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Netcity 2003-07-26
  • 打赏
  • 举报
回复
将查询数据库的方法封装成 WebService,然后在客户端用 JavaScript 调用 WebService 动态取得指定结点的子结点。
jaffler 2003-07-26
  • 打赏
  • 举报
回复
http://webfx.eae.net/
和treeview结合
chaoming 2003-07-25
  • 打赏
  • 举报
回复
在treeView中加入单击事件,在事件中加入特定的查询语句,将abcd作为sql的查询参数。不清楚你的数据库有多大,web中的速度本身就慢
sgsh51 2003-07-25
  • 打赏
  • 举报
回复
写Expand事件,下面有我写的一段代码,我用到的数据库是MaverlDatabase,用到的表主要有两张:XTYHZQX(系统用户组权限),XTGNZD(系统功能字典),我原本这棵树还有权限分配,就是每个用户登陆的时候见到的树都是不一样的,可能和你所要求的有所区别,所以我的代码叶只作参考:

Page_Load
TreeView1_Expand
TreeView1_Collapse
这三个是写在页面中的,


public string InitTree(TreeNodeCollection nds,string parentID)//主要功能建立树的根结点
{
//string strConnect="Server=localhost;Initial Catalog=MaverlDatabase;User ID=sa;Password=sa";
//string strSQL="SELECT F_GNBH,F_SJBH,F_XSMC FROM XTGNZD WHERE (F_GNBH IN (SELECT F_GNBH FROM XTYHZQX WHERE F_ZID = '"+ ReValue + "')) AND F_SJBH='" + parentID + "' ORDER BY F_GNBH;";
string strSQL="SELECT DISTINCT F_GNBH,F_SJBH,F_XSMC,F_MXBZ,F_NAVURL FROM XTGNZD WHERE F_SJBH='" + parentID + "' ORDER BY F_GNBH;";//选出给定的上级编号为parentID的记录

TreeNode NextNode;
DataSet mds=new DataSet();
mds=ExecuteSql4Ds(strSQL);//主要功能执行上述的SQL语句

foreach(DataRow rows in mds.Tables[0].Rows) //把记录中的各个字段赋给树节点
{
NextNode=new TreeNode();
NextNode.Text=rows["F_XSMC"].ToString();
NextNode.ID=rows["F_GNBH"].ToString();
NextNode.Expandable=ExpandableValue.CheckOnce;
NextNode.NodeData=rows["F_MXBZ"].ToString();
nds.Add(NextNode);
if(rows["F_MXBZ"].ToString()=="T")
{
NextNode.NavigateUrl=rows["F_NAVURL"].ToString();
NextNode.ImageUrl="LEAF.BMP";
}
else
{
NextNode.ImageUrl="./Closed.Bmp";
NextNode.ExpandedImageUrl="./Open.bmp";
}
NextNode.Target="main ";


parentID=NextNode.ID; //给出了下一层记录的上级编号
}
return(parentID);

}


private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!Page.IsPostBack)
{
string ParentID="";

nID=User1.InitTree(TreeView1.Nodes,ParentID);//初始化树

User1.ds.Dispose();
}


}

private void TreeView1_Expand( object sender, Microsoft.Web.UI.WebControls.TreeViewClickEventArgs e)
{
DataUser User2 =new DataUser();
User2.ds=User2.CreateDataSet();//这里有待于优化重写
User2.EnlargeCollection();
TreeNode FormerNode,NextNode;
DataView mDataView=new DataView();
mDataView.Table=User2.ds.Tables[0];
mDataView.Sort="F_GNBH";

FormerNode = TreeView1.GetNodeFromIndex(e.Node);//根据索引值来获得相应的树节点
nID=FormerNode.ID;


DataView dv =new DataView();
dv=User2.DecreaseRows(mDataView,nID);
dv.Sort=" F_GNBH DESC";
F_GNBH,F_SJBH,F_XSMC,F_MXBZ,F_NAVURL FROM XTLSGNZD WHERE F_SJBH='" + nID + "' ORDER BY F_GNBH;";

if (FormerNode.Nodes.Count == 0)
{
for(int rNumber=dv.Count-1;rNumber>=0;rNumber--)
{
NextNode=new TreeNode();
NextNode.Text=dv[rNumber]["F_XSMC"].ToString();
NextNode.ID=dv[rNumber]["F_GNBH"].ToString();
NextNode.NodeData=dv[rNumber]["F_MXBZ"].ToString();

FormerNode.Nodes.Add(NextNode);
if(dv[rNumber]["F_MXBZ"].ToString()=="T")
{
NextNode.NavigateUrl=dv[rNumber]["F_NAVURL"].ToString();
NextNode.ImageUrl="LEAF.BMP";
}

else
{
NextNode.ImageUrl="./Closed.Bmp";
NextNode.ExpandedImageUrl="./Open.bmp";
NextNode.Expandable=ExpandableValue.CheckOnce;
}
NextNode.Target="main";

nID=NextNode.ID;
}

}
dv.Dispose();
User2.ds.Dispose();
mDataView.Dispose();

}


private void TreeView1_Collapse(object sender , Microsoft.Web.UI.WebControls.TreeViewClickEventArgs e )
{

TreeNode Formernode;
Formernode = TreeView1.GetNodeFromIndex(e.Node);
if (Formernode.Nodes.Count > 0)
{
Formernode.Nodes.Clear();
Formernode.Expandable = ExpandableValue.Always;
}
}

override protected void OnInit(EventArgs e)
{
//
// CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
TreeView1.Expand += new ClickEventHandler(this.TreeView1_Expand);
TreeView1.Collapse +=new ClickEventHandler(this.TreeView1_Collapse);
TreeView1.SelectedIndexChange +=new SelectEventHandler(this.TreeView1_SelectedIndexChange);

}
jlj2002 2003-07-25
  • 打赏
  • 举报
回复
谢谢各位,关键是我的数据结构是固定的,因为我调用的是sqlserver扩展存储过程,想实现的是sqlserver企业管理器中备份中的数据库服务器的目录树,当我一次全部循环出目录结构时,需要一○分钟左右,所以,我希望动态加载
哦,对了,我的程序是基于web的
yuanylong 2003-07-25
  • 打赏
  • 举报
回复
应该可以实现:
1)确认数据库结构。
程序可以判断第一层节点的范围。
每个节点都有自己节点和父节点的id
2)获得当前点选的节点id
3)以当前节点的ID作为起始节点,初始化树。
xiajancy 2003-07-24
  • 打赏
  • 举报
回复
数据库中该表再增加一个字段,用来储存c,d,e等,然后用一个dropdownlist动态读取,然后根据塞选条件进行取值
yyywuxin 2003-07-24
  • 打赏
  • 举报
回复
if(选择的是C:)
你要表示出的节点的信息
for(要表示出的节点的个数)
{
treeView1.SelectedNode.Nodes.Add("节点名字");
}

yyywuxin 2003-07-24
  • 打赏
  • 举报
回复
if(选择的是C:)
你要表示出的节点的信息
for(要表示出的节点的个数)
{
treeView1.SelectedNode.Nodes.Add("");
}
CMIC 2003-07-24
  • 打赏
  • 举报
回复
gz

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧