<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的更多相关文章

  1. InnerException 消息是“反序列化对象 属于类型 *** 时出现错误。读取 XML 数据时,超出最大字符串内容长度配额 (8192)。(注意细节)

    WEB站点在调用我们WCF服务的时候,只要传入的参数过长,就报如下错误: 格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出错: formD ...

  2. 读取xml并将节点保存到Excal

    using NPOI.HPSF; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using System; using System.Coll ...

  3. Web Service 或 WCF调用时读取 XML 数据时,超出最大字符串内容长度配额(8192)解决方法

    1.调用服务时服务 当我们使用 Web Service 或 WCF 服务时,常把读取的数据转化为string类型(xml格式),当数据量达到一 定数量时,会出现以下异常: 错误:格式化程序尝试对消息反 ...

  4. Ajax读取XML和JSON数据

    Ajax从服务器获取的数据都是字符串,但是通过不同的解析,可以解析为XML或者JSON. 一般来说.使用XML格式的数据比较通用,但是服务器和客户端解析起来都比较复杂一些;而使用JSON语句话,服务端 ...

  5. 格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出错: GetLzdtArticleResult。InnerException 消息是“反序列化对象 属于类型 lzdt.DTO.Dtolzdt[] 时出现错误。读取 XML 数据时,超出最大

    当遇到这个错误的时候郁闷了好长时间报错是字符串长度过大可是修改了MaxStringContentLength”属性的值却不起作用最后才发现还是因为配置文件配置的问题在服务端 格式化程序尝试对消息反序列 ...

  6. C#读取xml文件写入到TreeView中

    开发过程中我们会遇到一些读取xml文件的时候,下面是我学习的整理. 用XmlDocument读取加载 XmlDocument doc = new XmlDocument(); doc.Load(&qu ...

  7. ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现

    ASP.NET MVC 学习笔记-2.Razor语法   1.         表达式 表达式必须跟在“@”符号之后, 2.         代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...

  8. 读取xml数据装配到字典中之应用场景

    前段时间看到支付宝设置里面有个多语言这个功能,蛮有意思的,就想双休没事的话做个相关的demo玩玩,可是礼拜六被妹子拽出去玩了一天,来大上海有大半年了,基本没有出去玩过,妹子说我是超级宅男,也不带她出去 ...

  9. 自己动手之使用反射和泛型,动态读取XML创建类实例并赋值

    前言: 最近小匹夫参与的游戏项目到了需要读取数据的阶段了,那么觉得自己业余时间也该实践下数据相关的内容.那么从哪入手呢?因为用的是Unity3d的游戏引擎,思来想去就选择了C#读取XML文件这个小功能 ...

随机推荐

  1. 【PRML读书笔记-Chapter1-Introduction】1.1 Example:Polynomial Curve Fitting

    书中给出了一个典型的曲线拟合的例子,给定一定量的x以及对应的t值,要你判断新的x对应的t值多少. 任务就是要我们去发现潜在的曲线方程:sin(2πx) 这时就需要概率论的帮忙,对于这种不确定给t赋何值 ...

  2. 各种Camera,总有一款适合你(一)

    根据游戏类型的不一样,会需要各种各样的摄像机,下面将分享三种典型的摄像机类型:(1)地下城摄像机:(2)第三人称跟随摄像机:(3)鼠标控制旋转摄像机.将这些控制脚本拖动到场景的MainCamera上即 ...

  3. Unity 学习资源

    NGUI文档及视频: http://www.tasharen.com/forum/index.php?topic=6754 动态更新的解决方案: http://game.ceeger.com/foru ...

  4. ruby -- 基础学习(四)TimeDate处理

     TimeDate格式化输出: DateTime.parse(Time.now.to_s).strftime('%Y-%m-%d %H:%M:%S').to_s #就是按照2013-8-16 16:4 ...

  5. DDD:聊天笔记

    聚合跟和实体 聚合根是实体. 实体有生命周期,使用标识进行跟踪. 聚合根是全局标识,由仓储或其它服务负责其生命周期. 实体是局部标识,由聚合根负责其生命周期. 为什么能应对复杂度? 纵向.横向.时间维 ...

  6. spring websocket源码分析

    什么是websocket? 摘录于wiki[1]: WebSocket is a protocol providing full-duplex communication channels over ...

  7. Pagekit – 现代化技术构建的轻量的 CMS 系统

    Pagekit 是一个模块化,轻量的 CMS 系统,基于现代化的技术,如 Symfony 组件和 Doctrine.它提供了一个很好的平台,用于主题和延伸开发.Pagekit 为您提供了工具来创造美丽 ...

  8. [python]decimal常用操作和需要注意的地方

    decimal模块 简介 decimal意思为十进制,这个模块提供了十进制浮点运算支持. 常用方法 1.可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确. 2.要 ...

  9. ASP.NET 图片上传工具类 upload image简单好用功能齐全

    使用方法: UploadImage ui = new UploadImage(); /***可选参数***/ ui.SetWordWater = "哈哈";//文字水印 // ui ...

  10. .net 根据匿名类生成实体类,根据datatable生成实体类,根据sql生成实体类

    在开发中可能会遇到这几种情况 1.EF或LINQ查询出来的匿名对象在其它地方调用不方便,又懒的手动建实体类 2.通过datatable反射实体需要先建一个类 ,头痛 3.通过SQL语句返回的实体也需要 ...