zoukankan
html css js c++ java
TreeView在显示大容量数据库数据时的使用
由于在利用
treeView
在显示大容量数据库数据时,使用递归算法非常费时,要求用户长时间的等待。那么如何在使用
treeView
显示大容量数据库数据时改善用户体验呢?
笔者使用用户自主选择的方法很好的解决了这一问题。
具体方法如下:
private
void
btnOpenData_Click(
object
sender, EventArgs e)
{
if
(openFileDialog1.ShowDialog()
==
DialogResult.OK)
{
//
获取数据源
datafilename
=
openFileDialog1.FileName;
string
constring
=
@"
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=
"
+
datafilename;
this
.lbltishi.ForeColor
=
Color.Red;
this
.lbltishi.Text
=
"
正在生成栏目资源目录……
"
;
this
.Refresh();
ds.Clear();
//
ds1.Clear();
OleDbConnection con
=
new
OleDbConnection();
try
{
con.ConnectionString
=
constring;
con.Open();
OleDbCommand cmd
=
new
OleDbCommand();
cmd.Connection
=
con;
cmd.CommandText
=
"
select * from tchannel order by channel_parentid
"
;
cmd.CommandType
=
CommandType.Text;
OleDbDataAdapter da
=
new
OleDbDataAdapter(cmd);
da.Fill(ds);
}
catch
(Exception ex)
{
throw
(ex);
}
finally
{
con.Close();
}
//
生成一级树目录
treeView1.Nodes.Clear();
TreeNode tn
=
new
TreeNode(
"
所有栏目资源
"
);
this
.treeView1.Nodes.Add(tn);
addtree(
"
0
"
, tn);
}
}
private
void
addtree(
string
ParentID, TreeNode pNode)
{
//
使用DataView提高用户体验,并在所有的同级子目录下都增加“请双击搜索子资源(XXXXX)”的下一级子目录,以便用户通过双击展开。
DataView dvtree
=
new
DataView(ds.Tables[
0
]);
dvtree.RowFilter
=
"
channel_parentid='
"
+
ParentID
+
"
'
"
;
foreach
(DataRowView row
in
dvtree)
{
TreeNode node
=
pNode.Nodes.Add(row[
"
channel_name
"
].ToString());
node.Nodes.Add(
"
请双击搜索子资源(
"
+
row[
"
channel_id
"
].ToString()
+
"
)
"
);
}
}
private
void
treeView1_NodeMouseDoubleClick_1(
object
sender, TreeNodeMouseClickEventArgs e)
{
//
从所双击的节点得到TREEVIEW
TreeView td
=
(TreeView)sender;
//
得到当前的节点
TreeNode tn
=
td.SelectedNode;
//
得到当前节点的父节点
TreeNode parenttn
=
tn.Parent;
//
从“请双击搜索子资源(channel_id)"中得到channel_id值,以便根据这个channel_id值在数据库中查找channel_parentid为此值的所有下一节点;
int
start
=
tn.Text.LastIndexOf(
"
(
"
);
int
end
=
tn.Text.LastIndexOf(
"
)
"
);
try
{
string
channelparentid
=
tn.Text.Substring(start
+
1
, end
-
start
-
1
);
//
如果找到值说明是双击的是“请双击搜索子资源(channel_id)”这一节点。
//
对这个节点应删除,以便添加新的子节点
tn.Remove();
addtree(channelparentid, parenttn);
}
//
否则就是一个已搜索出的有效的节点,对已搜索出的有效的节点,得到相应的数据资源路径,并在数据表中查询操作。
catch
(ArgumentOutOfRangeException ee)
{
//
得到当前节点的数据资源路径,并去掉0层上的“所有栏目资源\”,从而得到真正的数据资源路径。
try
{
this
.lblCurdata.Text
=
tn.FullPath.Substring(
7
);
string
channelid
=
this
.lblCurdata.Text;
bindgrid(channelid,typestring,
this
.dateTimePicker1.Value ,
this
.dateTimePicker2.Value);
//
查询数据操作
}
catch
(ArgumentOutOfRangeException ef)
{
this
.lblCurdata.Text
=
"
所有栏目
"
;
bindgrid(
"
-
"
, typestring,
this
.dateTimePicker1.Value,
this
.dateTimePicker2.Value);
}
}
}
查看全文
相关阅读:
怎样写贪吃蛇小游戏?用100行python代码轻松解决!
面试必问的celery,你了解多少?
您的机器学习环保吗?一只AI训练排出180吨二氧化碳
NLP技术应用到音乐领域,分分钟让你变成音乐大师!
数据可视化“升级”修炼宝典
一文掌握Python可视化库的两大王者
多线程-模拟阻塞queue队列
设计模式-单例模式
多线程之wait,notify,volatile,synchronized,sleep
spring与quartz整合
原文地址:https://www.cnblogs.com/ahuang1118/p/316513.html
最新文章
SQLServer:探讨EXEC与sp_executesql的区别详解
微服务(Microservice)那点事
SQL Server 2008 R2 清空数据库中ldf日志文件
谈一谈SQL Server中的执行计划缓存(下)
浅析SQL Server中的执行计划缓存(上)
优化SQL Server的内存占用之执行缓存
[转]caffe中solver.prototxt参数说明
矩阵乘法优化之分块矩阵
串行代码性能优化
[转]大数乘法的几种算法分析及比较(2014腾讯南京笔试题)
热门文章
[转]大整数算法[11] Karatsuba乘法
[转]遗传算法入门到掌握
[转]完美洗牌算法学习
[转]std::set、自定义类型与比较函数
自动检测SOCKET链接断开
[转]Linux 线程分离状态
搜狗开源了机器阅读理解工具包 SMRC,赶快来学习!
用 Python 实现机器学习的介绍
AMiner:2018自然语言处理研究报告
神经网络是什么?图灵奖得主Geoffrey Hinton为您解答
Copyright © 2011-2022 走看看