读取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文件这个小功能 ...
随机推荐
- [SQL Server]Index/deadlock
http://www.cnblogs.com/tintown/archive/2005/04/24/144272.html http://coolshell.cn/ http://blogs.msdn ...
- 用Razor語法寫範本-RazorEngine組件介紹【转——非常好,可以用它来代替NVelocity】
RazorEngine 官網網址:http://razorengine.codeplex.com 在找到RazorEngine之前曾經想過其他的方案,如T4與V8 Engine載jquery.temp ...
- C#的回调被C++调用
__stdcall 要加这个 extern "C" __declspec(dllexport) 要用这样的东东 定义 extern "C" __declspec ...
- 让我们一起Go(十一)
前言: 今天又要继续了,当初自己的挖的坑必须得填啊,尽管天气非常滴热,但是丝毫无法阻挡我填坑的热情,那么,我们继续让我们一起Go!!! 定义方法: 这里我们要来看看Golang中的(Methods)方 ...
- 【转】Linux下svn常用指令
转自: http://blog.csdn.net/myarrow/article/details/8110858 1.将文件checkout到本地目录svn checkout path(path是服务 ...
- jquery getJSON
function onNodeClick(data) { //只能选择体检分组 if (data.GroupType == 1) { ...
- DBA需要掌握的shell知识
每个中高级DBA都需要掌握一些简单脚本的编写,这样才能从繁杂重复的基础维护工作中解脱出来,才能有时间去研究更有价值的技术.VBird在讲shell script的时候,给出了几个经典的小范例练习,对于 ...
- Appium移动自动化测试(二)--安装Android开发环境
继续Appium环境的搭建. 第二节 安装Android开发环境 如果你的环境是MAC那么可以直接跳过这一节.就像我们在用Selenium进行web自动化测试的时候一样,我们需要一个浏览器来执行测试 ...
- Robot Framework自动化测试(五)--- 开发系统关键字
最近一直在用robot framework 做自动化测试项目,老实说对于习惯直接使用python的情况下,被框在这个工具里各种不爽,当然,使用工具的好处也很多,降低了使用成本与难度:当然,在享受工具带 ...
- [New Portal]Windows Azure Virtual Machine (10) 自定义Windows Azure Virtual Machine模板
<Windows Azure Platform 系列文章目录> 通过之前的文章,我相信大家对微软Windows Azure Virtual Machine有一定的了解了. 虽然微软提供了非 ...