请各位高手帮帮忙:怎样实现TreeView 的分级加载?(就象CSDN的树一样) 请各位高手帮帮忙:怎样实现TreeView 的分级加载?(就象CSDN的树一样)数据库数据太多了,层数也多,一次全加完太慢了.请各位帮个忙!!多谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用递归算法。下面是代码 public void InitRootTree(TreeNodeCollection TNC) { try { string strnode = "select BMBM,SJBMBM,BMMC from MAIN_QYZZJG"; Base.oledbda = new OleDbDataAdapter(strnode, Base.oledbcon); Base.oledbda.Fill(Base.ds, "node"); DataView dataView = new DataView();//实例化个视图 //ds是DataSet,已经从数据库里读取所有的数据了 dataView = Base.ds.Tables["node"].Copy().DefaultView;//将ds填充到视图里 //string aa = dataView[0].Row[0][0]; //ParentID是上级节点,由于第一个节点是没有上级节点的,所以我在数据库里把他的上级节点设置为0 dataView.RowFilter = "SJBMBM = '0'";//读取数据库里ParentID为0的行 foreach (DataRowView drv in dataView) { TreeNode tn = TNC.Add(drv["BMBM"].ToString(), drv["BMMC"].ToString(), 0);//添加节点 tn.Tag = drv["BMBM"].ToString(); //添加子节点 InitChildNodeTree(tn.Nodes, tn.Tag.ToString()); } Base.ds.Tables[0].Reset(); } catch (Exception Err) { APPH.ErrModule.ShowErrBox("数据加载失败", Err); } } public void InitChildNodeTree(TreeNodeCollection TNC, string ParentId) { try { DataView dataView = new DataView(); dataView = Base.ds.Tables["node"].Copy().DefaultView; dataView.RowFilter = "SJBMBM='" + ParentId + "'"; foreach (DataRowView drv in dataView) { TreeNode tn = TNC.Add(drv["BMBM"].ToString(), drv["BMMC"].ToString(), 0);//添加节点 tn.Tag = drv["BMBM"].ToString(); //递归 treeView1.SelectedNode = tn; InitChildNodeTree(tn.Nodes, tn.Tag.ToString()); } treeView1.ExpandAll(); } catch (Exception Err) { APPH.ErrModule.ShowErrBox("数据加载失败", Err); } } 跟一个问题,我想问一下handsome0308() ,使用你说的那种方法,怎么来显示第一层的节点前面是"+"号,还是"-"号呢?如果查询数据库,有数据的显示"+",没有的显示"-",但怎么来控制呢,看了看TreeNode属性,IsExpanded 只能获取不能设置阿:(,不胜感谢 在树的点击事件,或展开事件里做判断private void TreeView1_Expand(object sender, Microsoft.Web.UI.WebControls.TreeViewClickEventArgs e){ } 你说的是treeview web控件是吧,我想用的是winform的哦,刚看了看,web 的可以使用PopulateOnDemand 这个属性,form的没有呢。 函数指针的调试问题 C#接收邮件如何判读已读未读 C#结构体中数组怎么实例化 上传图片上传不了的问题急求解 100分求c#实现来电显示功能 请问值类型如何作引用字段? C# 怎么把一个文件转换成二进流存入数据库varbinary类型中 打印问题 请问,在DateTimePicker控件中如何可以设置到小时? 请教高手!!!一个关于C#响应事件的问题!让人非常困惑!!!!!!!!!!!!!! c# 绘图刷新的问题! 我怎么满眼看到的帖子都像不会结的那种呢
下面是代码
public void InitRootTree(TreeNodeCollection TNC)
{
try
{
string strnode = "select BMBM,SJBMBM,BMMC from MAIN_QYZZJG";
Base.oledbda = new OleDbDataAdapter(strnode, Base.oledbcon);
Base.oledbda.Fill(Base.ds, "node"); DataView dataView = new DataView();//实例化个视图
//ds是DataSet,已经从数据库里读取所有的数据了
dataView = Base.ds.Tables["node"].Copy().DefaultView;//将ds填充到视图里
//string aa = dataView[0].Row[0][0];
//ParentID是上级节点,由于第一个节点是没有上级节点的,所以我在数据库里把他的上级节点设置为0
dataView.RowFilter = "SJBMBM = '0'";//读取数据库里ParentID为0的行
foreach (DataRowView drv in dataView)
{
TreeNode tn = TNC.Add(drv["BMBM"].ToString(), drv["BMMC"].ToString(), 0);//添加节点
tn.Tag = drv["BMBM"].ToString();
//添加子节点
InitChildNodeTree(tn.Nodes, tn.Tag.ToString());
}
Base.ds.Tables[0].Reset();
}
catch (Exception Err)
{
APPH.ErrModule.ShowErrBox("数据加载失败", Err);
}
}
public void InitChildNodeTree(TreeNodeCollection TNC, string ParentId)
{
try
{
DataView dataView = new DataView();
dataView = Base.ds.Tables["node"].Copy().DefaultView;
dataView.RowFilter = "SJBMBM='" + ParentId + "'";
foreach (DataRowView drv in dataView)
{
TreeNode tn = TNC.Add(drv["BMBM"].ToString(), drv["BMMC"].ToString(), 0);//添加节点
tn.Tag = drv["BMBM"].ToString();
//递归
treeView1.SelectedNode = tn;
InitChildNodeTree(tn.Nodes, tn.Tag.ToString());
}
treeView1.ExpandAll();
}
catch (Exception Err)
{
APPH.ErrModule.ShowErrBox("数据加载失败", Err);
}
}
{
}