读取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文件这个小功能 ...
随机推荐
- LiveWriter Test
From LiveWriter.
- SNF开发平台WinForm之十一-程序打包-SNF快速开发平台3.3-Spring.Net.Framework
原来我们用的是微软自带的打包工具去打包,但感觉好像也是第三方做的打包并且很是麻烦,还有时不成功报错.那综合考虑就找一个简单实用的打包工具吧,就找到了NSIS这个.具体打包步骤如下: 1.安装NSIS ...
- JavaWeb学习系列——第一个JavaWeb程序
创建JavaWeb项目 Eclipse中新建一个Dynamic Web Project 指定项目名称.依赖环境 勾选生成web.xml选项 更改项目编译输出目录,项目右键 ->propertie ...
- Simplified CommonJS wrapper 与 AMD 标准定义模块差异
标准的 AMD 模块定义 一个标准的 AMD 模块看起来是这样子: define(['foo', 'foo/bar'], function (foo, bar) { return { doSometh ...
- android xmlns:tools用法
一开始不明白,后来删掉这个属性之后发现会出现一个提示: pick preview layout from the "Fragment Layout" context menu 原来 ...
- GET方法传递中文参数乱码解决办法
1.在页面中对你的URL进行编码 使用------encodeURI(你要使用的中文参数值)如:...?username"+encodeURI(“小甜甜") 2.在后台通过解码来接 ...
- 《微信小程序七日谈》- 第二天:你可能要抛弃原来的响应式开发思维
<微信小程序七日谈>系列文章: 第一天:人生若只如初见: 第二天:你可能要抛弃原来的响应式开发思维: 第三天:玩转Page组件的生命周期: 第四天:页面路径最多五层?导航可以这么玩 上篇文 ...
- [转载]SharePoint 2013测试环境安装配置指南
软件版本 Windows Server 2012 标准版 SQL Server 2012 标准版 SharePoint Server 2013 企业版 Office Web Apps 2013 备注: ...
- 直接拿来用!最火的Android开源项目
GitHub在中国的火爆程度无需多言,越来越多的开源项目迁移到GitHub平台上.更何况,基于不要重复造轮子的原则,了解当下比较流行的Android与iOS开源项目很是必要.利用这些项目,有时能够让你 ...
- 前端翻译:Promises/A+规范
原文地址:https://promisesaplus.com/ 本篇为原文翻译+个人理解,若有谬误请各位指正,谢谢. 尊重原创,转载请注明来自:http://www.cnblogs.com/fsjoh ...