请高手作答,关于C# TreeView 绑定 DataTable 的效率问题

我的代码是从数据库中读取数据,动态生成了一个DataTable(数据量及层级关系大概有五组),其中的字段中有父子节点关系,只是生成DataTable的话,在页面中显示是非... 我的代码是从数据库中读取数据,动态生成了一个DataTable(数据量及层级关系大概有五组),其中的字段中有父子节点关系,只是生成DataTable的话,在页面中显示是非常快的,但是一绑定TreeView就变得非常慢,我用的方法是在网上最常见的递归,想请教是否有更高效的方法,请高手帮忙作答,多谢,区区30分奉上。下面贴出TreeView绑定的代码:
public void Bind_Tv(DataTable dt, TreeNodeCollection tnc, string pid_val, string id, string pid, string text)
{
DataView dv = new DataView(dt);//将DataTable存到DataView中,以便于筛选数据
TreeNode tn;//建立TreeView的节点(TreeNode),以便将取出的数据添加到节点中
//以下为三元运算符,如果父id为空,则为构建“父id字段 is null”的查询条件,否则构建“父id字段=父id字段值”的查询条件
string filter = string.IsNullOrEmpty(pid_val) ? pid + " is null" : string.Format(pid + "='{0}'", pid_val);

dv.RowFilter = filter;//利用DataView将数据进行筛选,选出相同 父id值 的数据
foreach (DataRowView drv in dv)
{
tn = new TreeNode();//建立一个新节点(学名叫:一个实例)
tn.Value = drv[id].ToString();//节点的Value值,一般为数据库的id值
tn.Text = drv[text].ToString();//节点的Text,节点的文本显示

//tn.NavigateUrl = "xitongguanli/" + drv["url"].ToString();
//tn.Target = "lower_right";
tnc.Add(tn);//将该节点加入到TreeNodeCollection(节点集合)中
Bind_Tv(dt, tn.ChildNodes, tn.Value, id, pid, text);//递归(反复调用这个方法,直到把数据取完为止)
}
}
展开
 我来答
军曜坤qN
2015-11-26 · 超过37用户采纳过TA的回答
知道答主
回答量:140
采纳率:0%
帮助的人:64.7万
展开全部
我曾经做过一个类似的树型结构,但是因为数据量太大,层级也多,生成树确实会很慢。
目前生成树只能是递归,没有别的好办法,但想提高显示效率,至少视觉上看越来很快,我的办法是把每个递归拆开来执行,如下:
1:只绑定根结点并显示出来,并在结点名称后面显示出该结点的下级结点个数
2:给下级结点个数大于零的结点添加鼠标单击事件,单击后显示该结点的下级结点及下级结点对应的下级结点个数(与第一步相似)
3:如上两步,递归到叶子结点
这样,因为把绑定过程拆分了,每次只生成一层,速度会非常快,而且基本符合树的操作习惯,用户操作时如同一开始只看到了一颗全部闭合的树,然后一步步的展开,不会注意它与一次生成的树有什么区别。
追问
能帮忙把代码贴出来吗?多谢。
追答
这只是我曾经做过的一个项目中的其中一个小模块,时间很久了,这两年我基本已经不再使用asp.net的服务器控件,代码早没有了,只能告诉你思路,其实只要能写得出绑定树的方法,多写个事件也差不多的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
syht2000
高粉答主

2015-11-26 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.4亿
展开全部
你调用这个bind_tv的时候,第二个参数TreeNodeCollectio是怎么传值的,如果你直接用的页面上的控件的childnodes传它的,那就改成一个普通的TreeNodeCollection变量传进去,等bind_tv执行完了再赋值给页面的treeview
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阳光的雷咩咩
推荐于2016-04-29 · TA获得超过1.4万个赞
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:7823万
展开全部

有没有demo来测试一下,包括数据库?另外

  1. dt没必要做参数,dv可以作为全局变量一次性生成,应该可以提高一定速度。

  2. 其他有些参数似乎也没必要,自己分析下。

  3. 怎么没看到关联父子节点关系的语句?

本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式