读取XML绑定TreeNode
<asp:TreeView ID="treeview" OnClick="TreeViewCheckBox_Click()" runat="server">
</asp:TreeView>
treeview.ShowCheckBoxes = TreeNodeTypes.All;
treeview.ShowLines = true;
treeview.ExpandDepth = ;
treeview.TreeNodeCheckChanged += new TreeNodeEventHandler(treeview_TreeNodeCheckChanged);
if (!IsPostBack)
{
string url = "../../Xml/LayerConfig11.xml";
url = Server.MapPath(url);
XmlDocument xDoc = new XmlDocument();
xDoc.Load(url); XmlNode fn = xDoc.DocumentElement;
TreeNode tn = new TreeNode();
tn.Text = fn.Attributes["Name"].Value;
tn.ImageUrl = fn.Attributes["Icon"].Value;
tn.SelectAction = TreeNodeSelectAction.None;
treeview.Nodes.Add(tn); for (int i = ; i < treeview.Nodes.Count; i++)
{
if (treeview.Nodes[i].Checked)
{
treeview.Nodes[i].Parent.Checked = true;
}
}
XmlNodeList nodes = fn.ChildNodes;
foreach (XmlNode item in nodes)
{ if (item.Attributes["No"].Value == "" || item.Attributes["No"].Value == "")
{
TreeNode tn02 = new TreeNode();
tn02.Text = item.Attributes["Name"].Value;
tn02.ImageUrl = item.Attributes["Icon"].Value;
tn02.SelectAction = TreeNodeSelectAction.None;
tn.ChildNodes.Add(tn02);
AddNodes(tn02, item);
}
}
}
void treeview_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)
{
TreeNode tn = e.Node;
bool IsChecked = tn.Checked; CheckTreeNodeParent(tn, IsChecked); CheckTreeNodeChildren(tn, IsChecked);
}
treeview_TreeNodeCheckChanged事件
/// <summary>
/// 选中父类节点
/// </summary>
/// <param name="tn"></param>
/// <param name="Checked"></param>
private void CheckTreeNodeParent(TreeNode tn, bool Checked)
{
TreeNode ptn = tn.Parent; if (ptn != null)
{
if (Checked)
{
ptn.Checked = Checked;
CheckTreeNodeParent(ptn, Checked);
}
else
{
bool HasTreeNodeChecked = HasCheckedTreeNode(ptn);
if (!HasTreeNodeChecked)
{
ptn.Checked = Checked;
CheckTreeNodeParent(ptn, Checked);
}
}
}
}
选中父类节点
private bool HasCheckedTreeNode(TreeNode tn)
{
bool IsChecked = false;
if (tn != null)
{
TreeNodeCollection tns = tn.ChildNodes;
if (tns != null)
{
for (int i = ; i < tns.Count; i++)
{
if (tns[i].Checked)
{
IsChecked = true;
break;
}
else
{
HasCheckedTreeNode(tns[i]);
}
}
}
} return IsChecked;
}
判断子节点中是否还有选中的节点
private void CheckTreeNodeChildren(TreeNode tn, bool Checked)
{
TreeNodeCollection tns = tn.ChildNodes;
if (tns != null)
{
for (int i = ; i < tns.Count; i++)
{
tns[i].Checked = Checked; CheckTreeNodeChildren(tns[i], Checked);
}
}
}
选中子节点
/// <summary>
/// 递归绑定节点
/// </summary>
/// <param name="tnode">父级节点</param>
/// <param name="xnode">源节点</param>
private void AddNodes(TreeNode tnode, XmlNode xnode)
{
if (xnode.HasChildNodes)
{
foreach (XmlNode child in xnode.ChildNodes)
{
TreeNode tn03 = new TreeNode();
tn03.Text = child.Attributes["Name"].Value;
tn03.ImageUrl = child.Attributes["Icon"].Value;
tn03.SelectAction = TreeNodeSelectAction.None;
tnode.ChildNodes.Add(tn03);
if (child.HasChildNodes)
{
AddNodes(tn03, child);
}
else
{
continue;
}
}
}
}
递归绑定节点
读取XML绑定TreeNode的更多相关文章
- InnerException 消息是“反序列化对象 属于类型 *** 时出现错误。读取 XML 数据时,超出最大字符串内容长度配额 (8192)。(注意细节)
WEB站点在调用我们WCF服务的时候,只要传入的参数过长,就报如下错误: 格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出错: formD ...
- 读取xml并将节点保存到Excal
using NPOI.HPSF; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using System; using System.Coll ...
- Web Service 或 WCF调用时读取 XML 数据时,超出最大字符串内容长度配额(8192)解决方法
1.调用服务时服务 当我们使用 Web Service 或 WCF 服务时,常把读取的数据转化为string类型(xml格式),当数据量达到一 定数量时,会出现以下异常: 错误:格式化程序尝试对消息反 ...
- Ajax读取XML和JSON数据
Ajax从服务器获取的数据都是字符串,但是通过不同的解析,可以解析为XML或者JSON. 一般来说.使用XML格式的数据比较通用,但是服务器和客户端解析起来都比较复杂一些;而使用JSON语句话,服务端 ...
- 格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出错: GetLzdtArticleResult。InnerException 消息是“反序列化对象 属于类型 lzdt.DTO.Dtolzdt[] 时出现错误。读取 XML 数据时,超出最大
当遇到这个错误的时候郁闷了好长时间报错是字符串长度过大可是修改了MaxStringContentLength”属性的值却不起作用最后才发现还是因为配置文件配置的问题在服务端 格式化程序尝试对消息反序列 ...
- C#读取xml文件写入到TreeView中
开发过程中我们会遇到一些读取xml文件的时候,下面是我学习的整理. 用XmlDocument读取加载 XmlDocument doc = new XmlDocument(); doc.Load(&qu ...
- ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现
ASP.NET MVC 学习笔记-2.Razor语法 1. 表达式 表达式必须跟在“@”符号之后, 2. 代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...
- 读取xml数据装配到字典中之应用场景
前段时间看到支付宝设置里面有个多语言这个功能,蛮有意思的,就想双休没事的话做个相关的demo玩玩,可是礼拜六被妹子拽出去玩了一天,来大上海有大半年了,基本没有出去玩过,妹子说我是超级宅男,也不带她出去 ...
- 自己动手之使用反射和泛型,动态读取XML创建类实例并赋值
前言: 最近小匹夫参与的游戏项目到了需要读取数据的阶段了,那么觉得自己业余时间也该实践下数据相关的内容.那么从哪入手呢?因为用的是Unity3d的游戏引擎,思来想去就选择了C#读取XML文件这个小功能 ...
随机推荐
- 用Razor語法寫範本-RazorEngine組件介紹【转——非常好,可以用它来代替NVelocity】
RazorEngine 官網網址:http://razorengine.codeplex.com 在找到RazorEngine之前曾經想過其他的方案,如T4與V8 Engine載jquery.temp ...
- 【Java设计模式】单例模式
### 1. 概述> 单例模式是确保某一个类中有且只有一个实例. ----------### 2. 饿汉式单例``` javapublic class SingletonInstance { p ...
- SQL 解锁表
http://www.cnblogs.com/chjf2008/archive/2012/11/21/2780787.html 最主要是找到最近使用工具或者应用连接过数据库的进程,关掉它就可以了.
- MyBatis知多少(26)MyBatis和Hibernate区别
iBatis和Hibernate之间有着较大的差异,但两者解决方案很好,因为他们有特定的领域.我个人建议使用MyBatis的,如果: 你想创建自己的SQL,并愿意维持他们. 你的环境是由关系数据模型驱 ...
- 【分享】Matlab R2015a 发布啦!
本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html Matlab和C#混合编程文章目录:http://www.cnblogs.com ...
- Visual Studio 2013 Preview对C++11的支持
为期3天的微软Build 2013大会结束了,作为微软一年一度的开发者大会,微软也做足了功夫:很多产品(包括Windows 8.1和Visual Studio 2013 Preview)发布,chan ...
- 最近读cocoaui源代码有感
上半年为了做一个ios的应用,引入了cocoaui库,主要是用来布局ios界面,发现简化了不少代码和工作量.因为在写第一个ios应用的时候,用的代码布局,在适配4s和6的机型时候,几乎被搞死,大量的约 ...
- scrum1.4---Sprint 计划
燃尽图
- C#设计模式——命令模式(Command Pattern)
一.概述通常来说,“行为请求者”与“行为实现者”是紧耦合的.但在某些场合,比如要对行为进行“记录.撤销/重做.事务”等处理,这种无法抵御变化的紧耦合是不合适的.在这些情况下,将“行为请求者”与“行为实 ...
- Python入门笔记(24):Python面向对象(1)速成
一.Python经典类与新类 经典类:如果没有直接或间接的子类化一个对象,也就是说如果没有指定一个父类,或者是如果子类化的基本类没有父类,那么就定义了经典类: class classics: 'def ...