本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《
阿里云开发者社区用户服务协议
》和
《
阿里云开发者社区知识产权保护指引
》。如果您发现本社区中有涉嫌抄袭的内容,填写
侵权投诉表单
进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
DBSystem.ExecuteSQL tmp =
new
DBSystem.ExecuteSQL("T");
DataTable dt = tmp.GetDataTable("select * from TreeView");
//
从数据库抓出数据
this
.AddNodes(dt,
null
,"0");
//
添加节点
this
.TreeView1.SelectedNodeIndex="";
//
不选中任何节点。
/*
下一节将介绍如何修改
TreeView.cs
源码来取消默认选中节点的方法
*/
///
<summary>
///
添加节点及其包含的子节点
///
</summary>
///
<param name="dt">
从数据库抓出的
DataTable
</param>
///
<param name="node">
将要添加子节点的父节点
</param>
///
<param name="id">
父节点的
ID
,“
0
”
为根节点
</param>
private
void
AddNodes(DataTable dt,TreeNode node,
string
id)
DataRow[] rows = dt.Select("ParentID="+id);
//
筛选出属于父节点
“
node
”的子节点集合
foreach
(DataRow dr
in
rows)
//
循环子节点集合
TreeNode nd =
new
TreeNode();
nd.NavigateUrl=dr["URL"].ToString();
//
设置浏览的网址
nd.NodeData=dr["NodeID"].ToString();
//
存放节点
ID
nd.Text=dr["NodeName"].ToString();
//
设置节点名称
this
.AddNodes(dt,nd,nd.NodeData);
//
递归,添加该节点的子节点
if
(node==
null
|| id=="0")
this
.TreeView1.Nodes.Add(nd);
//
添加至根节点
node.Nodes.Add(nd);
//
添加子节点
2、
展开节点时读取该节点的数据
TreeView
控件属性→
自动提交(
AutoPostBack
)
→
True
TreeView
控件属性→
事件
→
双击展开(
Expand
)
///
<param name="e"></param>
private
void
TreeView1_Expand(
object
sender, Microsoft.Web.UI.WebControls.TreeViewClickEventArgs e)
TreeNode nd =
this
.TreeView1.GetNodeFromIndex(e.Node);
//
找到触发事件的节点,即正在展开的节点
if
(nd.Nodes[0].NodeData=="")
//
第一次加载,即只有“正在加载……”这一项
this
.AddSingleNode(nd,nd.NodeData);
//
加载子节点
///
<summary>
///
只查找、添加单个节点下的子节点
///
</summary>
///
<param name="node">
需要添加子节点的
TreeNode
</param>
///
<param name="id">
该节点的
NodeID
</param>
private
void
AddSingleNode(TreeNode node,
string
id)
if
(node!=
null
&& id!="0")
node.Nodes.Clear();
//
清空节点,主要是把“正在加载……”这一项移除
DBSystem.ExecuteSQL tmp =
new
DBSystem.ExecuteSQL("T");
DataTable dt = tmp.GetDataTable("select * from TreeView where ParentID="+id);
//
从数据库抓出数据
foreach
(DataRow dr
in
dt.Rows)
//
历遍所有子节点
TreeNode nd =
new
TreeNode();
nd.NavigateUrl=dr["URL"].ToString();
//
设置浏览的网址
nd.NodeData=dr["NodeID"].ToString();
//
存放节点
ID
nd.Text=dr["NodeName"].ToString();
//
设置节点名称
TreeNode child =
new
TreeNode();
//
此节点只作为“
nd
”展开的依据,并无它意
child.Text="
正在加载……
";
nd.Nodes.Add(child);
if
(node==
null
|| id=="0")
this
.TreeView1.Nodes.Add(nd);
//
添加至根节点
node.Nodes.Add(nd);
//
添加子节点
五、
修改“
TreeView.cs
”源码,取消
TreeView
默认选中节点
1、
TreeView.cs
文件
在文中﹐找到
“
protected
override
void
OnLoad(EventArgs e)
”事件
“
protected
override
void
OnPreRender(EventArgs e)
”
事件,修改以下代码
if
((SelectedNodeIndex == "" || SelectedNodeIndex == String.Empty) && Nodes.Count > 0)
//SelectedNodeIndex = "0"; //
修改前
SelectedNodeIndex = "";
//
修改后
2、
TreeView.htc
文件
在“
C:/Inetpub/wwwroot/webctrl_client/1_0/ TreeView.htc
”中找到“
function
ondocumentready()
”把以下代码注释掉
// verify selectedNodeIndex
/****************** Change By Jerry On 2005-01-25 ******************/
if (getNodeFromIndex(selectedNodeIndex) == null) { if (getNodeFromIndex("0") != null) selectedNodeIndex = "0"; else selectedNodeIndex = ""; }
/****************** Change By Jerry On 2005-01-25 ******************/
在“
function
tryToBuildTreeFromRoot()
”修改以下代码
if
(selectedNodeIndex.length == 0)
//prop_selectedNodeIndex = "0";
//
修改前
prop_selectedNodeIndex = "";
//
修改后
3、
使用
修改“
TreeView.cs
”后,重新编译一次,生成新的“
Microsoft.Web.UI.WebControls.dll
”。应用时只需要设置
“
SelectedNodeIndex
”为
“”
即可
this
.TreeView1.SelectedNodeIndex="";
//
不选中任何节点。
六、
使用
XML
文档创建
TreeView
1、
XML
文档的要求
a)
描述节点名称是固定的“
<
treenodes
></
treenodes
>
”与“
<
treenode
></
treenode
>
”
b)
虽然
XML
文文件对字母的大小写严格区分,但绑定时会忽略
c)
“
<
treenode
></
treenode
>
”
节点中的属性,必须与
TreeView
控件中的
TreeNode
属性对应
d)
“
<
treenode
></
treenode
>
”节点中的文本不能写在节点内,只能以
“
Text
”属性出现,如“
<
treenode
>
Node01
</
treenode
>
”行不通,应为“
<
treenode
Text
="Node01">
</
treenode
>
”
以下是一个可用于“
TreeView
”控件绑定源的范例﹕
<?
xml
version
="1.0"
encoding
="utf-8"
?>
<
TREENODES
>
<
TREENODE
Text
="Node01">
<
TREENODE
NavigateUrl
="04.htm"
Text
="Node04"></
TREENODE
>
</
TREENODE
>
<
treenode
NavigateUrl
="05.htm"
text
="Node05"
NodeData
="05"
CheckBox
="true"></
treenode
>
<
TREENODE
NavigateUrl
="03.htm"
Text
="Node03"></
TREENODE
>
</
TREENODES
>
2、
绑定的代码
this
.TreeView1.TreeNodeSrc="TreeXML.xml";
this
.TreeView1.DataBind();
【WPF】【UWP】借鉴 asp.net core 管道处理模型打造图片缓存控件 ImageEx
原文:【WPF】【UWP】借鉴 asp.net core 管道处理模型打造图片缓存控件 ImageEx
在 Web 开发中,img 标签用来呈现图片,而且一般来说,浏览器是会对这些图片进行缓存的。
比如访问百度,我们可以发现,图片、脚本这种都是从缓存(内存缓存/磁盘缓存)中加载的,而不是再去访问一次百度的服务器,这样一方面改善了响应速度,另一方面也减轻了服务端的压力。