相关文章推荐
慈祥的热水瓶  ·  如何利用Microsoft ...·  1 年前    · 
卖萌的牛肉面  ·  vue引用xlsx-style组件 ...·  2 年前    · 
忐忑的卤蛋  ·  DbExtensions.Include ...·  2 年前    · 
淡定的枇杷  ·  Zmq pub from go using ...·  2 年前    · 
None.gif 遍历节点
None.gif
void GetAllNodeText(TreeNodeCollection tnc)
ExpandedBlockStart.gif
{
InBlock.gif
foreach (TreeNode node in tnc)
ExpandedSubBlockStart.gif
{
InBlock.gif
if (node.Nodes.Count != 0 )
InBlock.gif GetAllNodeText(node.Nodes);
InBlock.gif Response.Write(node.Text
+ " " );
ExpandedSubBlockEnd.gif }

ExpandedBlockEnd.gif }

None.gif
None.gif 建树
None.gif
private void CreateTree(TreeNodeCollection folderTreeNodeCollection , string parentID)
ExpandedBlockStart.gif
{
InBlock.gif
if (parentID == "" )
ExpandedSubBlockStart.gif
{
InBlock.gif dv.RowFilter
= " ParentID is null " ;
ExpandedSubBlockEnd.gif }

InBlock.gif
else
ExpandedSubBlockStart.gif
{
InBlock.gif dv.RowFilter
= " ParentID= " + " ' " + parentID + " ' " ;
ExpandedSubBlockEnd.gif }

InBlock.gif
foreach (DataRowView drv in dv)
ExpandedSubBlockStart.gif
{
InBlock.gif TreeNode tn
= new TreeNode();
InBlock.gif tn.Expanded
= true ;
InBlock.gif tn.ID
= drv.Row[ " TypeID " ].ToString().Trim();
InBlock.gif tn.Text
= drv.Row[ " TypeName " ].ToString().Trim();
InBlock.gif folderTreeNodeCollection.Add(tn);
InBlock.gif CreateTree(tn.Nodes,tn.ID);
ExpandedSubBlockEnd.gif }

ExpandedBlockEnd.gif }

None.gif
None.gif 遍历选中节点
None.gif
private void getAllCheckedNode(TreeNodeCollection tnc)
ExpandedBlockStart.gif
{
InBlock.gif
foreach (TreeNode tn in tnc)
ExpandedSubBlockStart.gif
{
InBlock.gif
if (tn.Checked == true )
ExpandedSubBlockStart.gif
{
InBlock.gif Response.Write(tn.Text
+ ””);
ExpandedSubBlockEnd.gif }

InBlock.gif
if (tn.Nodes.Count > 0 )
ExpandedSubBlockStart.gif
{
InBlock.gif getAllCheckedNode(tn.Nodes);
ExpandedSubBlockEnd.gif }

ExpandedSubBlockEnd.gif }

ExpandedBlockEnd.gif }

None.gif
None.gif 选中或取消选中节点 , 自动选中或取消选中期子节点
None.gif
private void CheckedChildNode(TreeNode tn)
ExpandedBlockStart.gif
{
InBlock.gif
if (tn.Nodes.Count > 0 )
ExpandedSubBlockStart.gif
{
InBlock.gif
foreach (TreeNode tnn in tn.Nodes)
ExpandedSubBlockStart.gif
{
InBlock.gif tnn.Checked
= tn.Checked;
InBlock.gif CheckedChildNode(tnn);
ExpandedSubBlockEnd.gif }

ExpandedSubBlockEnd.gif }

ExpandedBlockEnd.gif }

None.gif
None.gif 调用方法
None.gif
private void TreeView1_Check( object sender, Microsoft.Web.UI.WebControls.TreeViewClickEventArgs e)
ExpandedBlockStart.gif
{
InBlock.gif setAllCheckedNode(TreeView1.GetNodeFromIndex(e.Node));
ExpandedBlockEnd.gif }

1、 全部读取并一次性展现

private void Page_Load( object sender, System.EventArgs e)

if (IsPostBack)

return ;

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

/// <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();

本文转自高海东博客园博客,原文链接:http://www.cnblogs.com/ghd258/archive/2005/12/07/292657.html,如需转载请自行联系原作者

【WPF】【UWP】借鉴 asp.net core 管道处理模型打造图片缓存控件 ImageEx
原文:【WPF】【UWP】借鉴 asp.net core 管道处理模型打造图片缓存控件 ImageEx 在 Web 开发中,img 标签用来呈现图片,而且一般来说,浏览器是会对这些图片进行缓存的。 比如访问百度,我们可以发现,图片、脚本这种都是从缓存(内存缓存/磁盘缓存)中加载的,而不是再去访问一次百度的服务器,这样一方面改善了响应速度,另一方面也减轻了服务端的压力。