我的treeview代码执行很慢,请大家帮忙优化一下 http://blog.csdn.net/taomanman/article/details/4816297 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 尽量只 一次性加载 数据,也就是说你尽量只访问一次数据库,像你这么访问数据库不悲剧么??你可以先把数据放到内存中,然后用算法组成一棵数据树 然后再把数据树放到treeview中 用rowfilter也是不错的方法,相对比较简单....... 建议 使用forrach()循环 using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Data.SqlClient;using System.Data;namespace 斯德瑞克{ public partial class Control_pro_left : System.Web.UI.UserControl { DataTable dt = new DataTable(); protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { try { string conString = "Data Source=61.129.102.96;uid=sdrk;pwd=ling1208;Database=sdrk_0517_86986158"; SqlConnection con = new SqlConnection(conString); con.Open(); string strSQL = "select * from sysparameters"; SqlDataAdapter da = new SqlDataAdapter(strSQL, con); da.Fill(dt); con.Close(); } catch { } finally { } AddTreeNode(0, (TreeNode)null); } } protected void AddTreeNode(int parentId, TreeNode pNode) { TreeNode tn1 = new TreeNode(); DataView dv = new DataView(dt); //过滤parentId,得到当前节点的所有子节点 dv.RowFilter = "pid=" + parentId; foreach (DataRowView drv in dv) { if (pNode == null) { tn1.Text = drv["name"].ToString(); //节点上要显示的名称 // tn1.NavigateUrl = drv["url"].ToString(); //点击节点名称,跳转到指定url页面 this.ling1208.Nodes.Add(tn1); //将根节点加入到TreeView中去 tn1.Expanded = true; //递归调用 AddTreeNode(Int32.Parse(drv["id"].ToString()), tn1); } else { TreeNode tn2 = new TreeNode(); tn2.Text = drv["name"].ToString(); // tn2.NavigateUrl = drv["url"].ToString(); pNode.ChildNodes.Add(tn2); tn1.Expanded = true; //递归调用 AddTreeNode(Int32.Parse(drv["id"].ToString()), tn2); } } } }}这是我用taomanman修改后的代码,但提示:索引必须位于该列表的界限内。参数名: index 异常详细信息: System.ArgumentOutOfRangeException: 索引必须位于该列表的界限内。参数名: index源错误: // tn1.NavigateUrl = drv["url"].ToString(); //点击节点名称,跳转到指定url页面 this.ling1208.Nodes.Add(tn1); //将根节点加入到TreeView中去 恩???你的ling1208是什么?是那个TreeView控件的ID??你之前页面中的代码this.Trv_list.Nodes.Add(node);说明你的TreeView的ID为Trv_list怎么后来ID你都改了?还是你敲错了????而且你怎么命名空间怎么还中文???namespace 斯德瑞克还有代码你照着修改,但是数据库的结构跟我举例的类似不?? 这递归相当于有几十个 或者几百个未关闭 数据库连接或datareader对象实例,肯定会卡了 紧急求助:关于页面间参数传递的问题,请抽空关注一下,谢谢! 在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的。如果在 IIS 中没有将虚拟目录配置为 关于 .net下的测试! 断点 用open打開的窗體問題 网页 快播播放器 在位置 0 处没有任何行(请教高手,调试过程遇到的) 求一个 yyyy/mm/dd HH:mm:ss的格式正则表达式,全面点的 嘿,我又有问题了,关于读取文本文件内的中文。 关于在一个页面中引用另一个页面的对象 在线考试系统的登陆问题 win7如何在iis里配置伪静态
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
namespace 斯德瑞克
{
public partial class Control_pro_left : System.Web.UI.UserControl
{
DataTable dt = new DataTable();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{ try
{
string conString = "Data Source=61.129.102.96;uid=sdrk;pwd=ling1208;Database=sdrk_0517_86986158"; SqlConnection con = new SqlConnection(conString); con.Open(); string strSQL = "select * from sysparameters"; SqlDataAdapter da = new SqlDataAdapter(strSQL, con); da.Fill(dt);
con.Close();
} catch
{ } finally
{ } AddTreeNode(0, (TreeNode)null); }
} protected void AddTreeNode(int parentId, TreeNode pNode)
{ TreeNode tn1 = new TreeNode(); DataView dv = new DataView(dt); //过滤parentId,得到当前节点的所有子节点 dv.RowFilter = "pid=" + parentId;
foreach (DataRowView drv in dv)
{ if (pNode == null)
{ tn1.Text = drv["name"].ToString(); //节点上要显示的名称 // tn1.NavigateUrl = drv["url"].ToString(); //点击节点名称,跳转到指定url页面 this.ling1208.Nodes.Add(tn1); //将根节点加入到TreeView中去 tn1.Expanded = true; //递归调用 AddTreeNode(Int32.Parse(drv["id"].ToString()), tn1); } else
{ TreeNode tn2 = new TreeNode(); tn2.Text = drv["name"].ToString(); // tn2.NavigateUrl = drv["url"].ToString(); pNode.ChildNodes.Add(tn2); tn1.Expanded = true; //递归调用 AddTreeNode(Int32.Parse(drv["id"].ToString()), tn2); } } } }
}这是我用taomanman修改后的代码,但提示:
索引必须位于该列表的界限内。
参数名: index
异常详细信息: System.ArgumentOutOfRangeException: 索引必须位于该列表的界限内。
参数名: index源错误:
// tn1.NavigateUrl = drv["url"].ToString(); //点击节点名称,跳转到指定url页面
this.ling1208.Nodes.Add(tn1); //将根节点加入到TreeView中去
this.Trv_list.Nodes.Add(node);
说明你的TreeView的ID为Trv_list怎么后来ID你都改了?还是你敲错了????而且你怎么命名空间怎么还中文???namespace 斯德瑞克还有代码你照着修改,但是数据库的结构跟我举例的类似不??