数据库里有五百多条数据,但是我用的方法加载树时却很慢,有没有什么好的方法能让树加载的快一点
解决方案 »
- c# 优化SQL语句还是优化程序代码
- 我发的帖子怎么不停的刷新?是不是内容多了就会自动刷新?终于导出Excel了!又发现2个问题:多导出一个Excel就多一个进程(进程不会自动关闭),超过570行数据就出错!
- 求一个发送邮件的代码,邮件内容是网页 (我用的是.net2003)
- DataGridView怎样绑定自定义对象
- 问个自动打印机的问题(软件相关)
- 一个比较偏的问题,关于与工控软件通讯的
- 这段程序难道必须用匿名方法才能实现么?实例化一个Action委托挂一个方法,难道不行?我不知道怎么办了
- RDLC中的表达式问题
- 问一个反汇编求c#的程序中的内存地址的问题,是不是有BUG?
- 我正做一个程序,有控件的移动问题(如在一个Panel里移动一个Label),请大家帮忙解决一下,提供源代码最好!
- C#新手,一个简单的问题 跪求高手进啊.....
- [[[未能找到任何可识别的数字]]]
{
DataSet ds = new DataSet();
string sqlStr = string.Format("select * from functionlist where parentID=0");
OleDbDataAdapter adp = new OleDbDataAdapter(sqlStr, oleConnection1);
ds.Clear();
adp.Fill(ds, "check");
DataTable table = ds.Tables[0];
foreach (DataRow dr in table.Rows)
{
TreeNode node = new TreeNode();
node.Name = dr["id"].ToString();
node.Tag = "0";
node.Text = dr["CN"].ToString();
treeView1.Nodes.Add(node);
CreateTree(node);
}
}
private void CreateTree(TreeNode treeNode)
{ //name id; tag parentID
//查找子节点
DataSet ds = new DataSet();
string sqlStr = string.Format("select * from functionlist where parentID={0}", treeNode.Name);
OleDbDataAdapter adp = new OleDbDataAdapter(sqlStr, oleConnection1);
ds.Clear();
adp.Fill(ds);
DataTable table = ds.Tables[0];
if (table.Rows.Count > 0)
{
foreach (DataRow dr in table.Rows)
{
TreeNode node = new TreeNode();
node.Name = dr["id"].ToString();
node.Tag = dr["parentID"].ToString();
node.Text = dr["CN"].ToString();
treeNode.Nodes.Add(node);
CreateTree(node);
}
}
}
/// 加载部门
/// </summary>
public void InialData()
{
try
{
this.advTreePathSort.Nodes.Clear();
this.advTreePathSort.Refresh();
this.nodePart.Nodes.Clear();
int tt = this.advTreePathSort.Nodes.Count;
//查找部门
List<TMIS.Model.Department> lstType = tdb.bllDepartment.GetModelList(" fartherId='001'");
foreach (TMIS.Model.Department itemList in lstType)
{
DevComponents.AdvTree.Node nodeBig = new DevComponents.AdvTree.Node();
nodeBig.Name = itemList.typeid;
nodeBig.Text = itemList.Name;
nodeBig.CheckBoxVisible = false;
this.nodePart.Nodes.Add(nodeBig);
//查找本部门的下级部门
Load_User_List_Part(itemList.typeid, ref nodeBig);
}
this.advTreePathSort.Nodes.Add(nodePart);
this.advTreePathSort.Refresh();
this.advTreePathSort.ExpandAll();
}
catch (Exception ex)
{
}
} /// <summary>
/// 递归
/// </summary>
/// <param name="_pid"></param>
/// <param name="nodeMain"></param>
private void Load_User_List_Part(string _pid, ref DevComponents.AdvTree.Node nodeMain)
{
try
{
if (_pid == null)
{
_pid = "";
} //查找当前级别的下级
List<TMIS.Model.Department> lstType = tdb.bllDepartment.GetModelList(" fartherId='" + _pid + "' ");
foreach (TMIS.Model.Department itemList in lstType)
{
DevComponents.AdvTree.Node nodeBig = new DevComponents.AdvTree.Node();
nodeBig.Name = itemList.typeid;// 部门,不加载编号 itemList.fPartID;
nodeBig.Text = itemList.Name;
nodeBig.CheckBoxVisible = false;
//查找小类别
Load_User_List_Part(itemList.typeid, ref nodeBig); nodeMain.Nodes.Add(nodeBig);
}
}
catch (Exception ex)
{
}
}
{
List<Sys_right> list = new List<Sys_right>();
df = new DataAccessFactory();
da = df.CreateDataAccess();
string sql = " select * from sys_tree_right Where parent_code=@parent_code order by next_code";
da.AddFieldsParameters("parent_code", _parent_code);
da.SetDefaultCommandTextSql(sql);
DataTable table = da.ExecuteAndReturnDataTable();
foreach (DataRow row in table.Rows)
{
Sys_right sr = new Sys_right();
sr.Parent_code = (string)row["parent_code"];
sr.Next_code = (string)row["next_code"];
sr.Content = (string)row["content"];
sr.Url = (string)row["url"];
sr.Image = (string)row["image"];
sr.Target=(string)row["target"];
list.Add(sr);
}
//reader.Dispose();
return list;
// parent_code next_code content url image
}
public void LoadFilesTree(TreeView TreeView1)
{
TreeView1.Nodes.Clear();
List<Sys_right> nodes = GetTreeRight("root");//得到所有第一层节点文件 foreach (Sys_right node in nodes)
{
string parent_code = node.Parent_code;
string next_code = node.Next_code;
string content = node.Content;
string url = node.Url;
string image = node.Image;
string target = node.Target;
if (content.Length > 19)
{
content = content.Substring(0, 8) + "...";
} TreeNode Node = CreatTreeNode(content, next_code, url, image, target);
CreateFileTree(next_code, Node);
TreeView1.Nodes.Add(Node);
//TreeView1.FindNode("L01").Expand();
} }
//递归显示所有文件——创建其他子节点
private void CreateFileTree(string nodeId, TreeNode Node)
{
List<Sys_right> nodes = GetTreeRight(nodeId);//获得父节点Id得到所有的子文件信息
foreach (Sys_right node in nodes)
{
string parent_code = node.Parent_code;
string next_code = node.Next_code;
string content = node.Content;
string url = node.Url;
string image = node.Image;
string target = node.Target; TreeNode chiledNode = CreatTreeNode(content, next_code, url, image, target);
CreateFileTree(next_code, chiledNode);//递归创建各层节点
AddTree(Node, chiledNode);//将子节点加入到父节点中
}
} /// <summary>
/// 创建一个树节点,返回一个树节点对象,参数内容是:
/// 节点名称,节点ID,链接地址,正常图标,展开后的图标
/// </summary>
private TreeNode CreatTreeNode(string strText, string strId, string strUrl, string strImg,string strTarget)
{
TreeNode newNode = new TreeNode();
newNode.Text = strText;
newNode.Value = strId;
newNode.NavigateUrl = strUrl;
newNode.ImageUrl = strImg;
newNode.Target = strTarget;
return newNode;
} /// <summary>
/// 把子节点添加到父节点当中
/// </summary>
private void AddTree(TreeNode FatherNode, TreeNode ChildNode)
{
FatherNode.ChildNodes.Add(ChildNode);
}
如果winform,首选的是增量查询和渲染树结构,而不是一次性绘制,
详细的解释请看:
http://topic.csdn.net/u/20110707/11/f8f27ef3-f401-433a-ba7e-01ed2975ef4d.html请注意我在60和62楼的回复,
希望对楼主有帮助
,这是我的代码
private void GetData(int parentid, TreeNode pnode)
{
DataSet ds = new DataSet();
string sqlStr = string.Format("select * from functionlist where parentID=0");
OleDbDataAdapter adp = new OleDbDataAdapter(sqlStr, oleConnection1);
ds.Clear();
adp.Fill(ds, "check");
DataTable table = ds.Tables[0];
foreach (DataRow dr in table.Rows)
{
TreeNode node = new TreeNode();
node.Name = dr["id"].ToString();
node.Tag = "0";
node.Text = dr["CN"].ToString();
treeView1.Nodes.Add(node);
CreateTree(node);
}
}
private void CreateTree(TreeNode treeNode)
{ //name id; tag parentID
//查找子节点
DataSet ds = new DataSet();
string sqlStr = string.Format("select * from functionlist where parentID={0}", treeNode.Name);
OleDbDataAdapter adp = new OleDbDataAdapter(sqlStr, oleConnection1);
ds.Clear();
adp.Fill(ds);
DataTable table = ds.Tables[0];
if (table.Rows.Count > 0)
{
foreach (DataRow dr in table.Rows)
{
TreeNode node = new TreeNode();
node.Name = dr["id"].ToString();
node.Tag = dr["parentID"].ToString();
node.Text = dr["CN"].ToString();
treeNode.Nodes.Add(node);
CreateTree(node);
}
你打开一个文件夹,在里面建20个空的文件夹,全选,复制,
重复复制个几千个,
你看看微软是怎么做的,当时就有答案了增量查询+动态绘制微软十几年前就给我们示范了,
程序员天天用windows.sqlserver这些工具,这些手段早就不是什么新鲜货了
你打开一个上万条记录的数据表或者结果集,
当你把滚动条拖到底部的时候,
也可以看到微软是怎么处理的