本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议 》和 《 阿里云开发者社区知识产权保护指引 》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单 进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

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 标签用来呈现图片,而且一般来说,浏览器是会对这些图片进行缓存的。 比如访问百度,我们可以发现,图片、脚本这种都是从缓存(内存缓存/磁盘缓存)中加载的,而不是再去访问一次百度的服务器,这样一方面改善了响应速度,另一方面也减轻了服务端的压力。