分享:Microsoft IE Webcontrols Treeview的一个bug及修正

treeview|web

首先感谢思归指点了我如何重用Treeview这个Microsoft IE Webcontrol。相关内容请参见http://community.csdn.net/Expert/TopicView.asp?id=3365114

  IE webcontrol可以单独用于html文件中,也可以用于web form的.net 程序;
  对于后者,使用中可以通过编程加入节点,也可以绑定;
  对于后者,绑定的时候,可以帮定一个xml格式的字符串,也可以绑定一个xml文件,只要向Treeview控件的TreeNodeSrc属性赋值;
  对于后者,有两种可能,一种是绑定到一个已经存在于硬盘的xml文件,或者说TreeNodeSrc的值设定为"...../foo.xml"上、另一种则是先创建一个aspx页面动态产生xml格式的输出,绑定到这个页面。
  对于后者,会产生错误。

  原因是,Treeview控件其实有两个地方可以绑定,或者说,解析数据源产生树的结构,一是在Server Side,一是在Browser Side。在Treeview控件Render的过程中,如果发现TreeNodeSrc是一个地址,它就会试图读这这个地址的内容,然后解析,并显式的写到web页面的输出中,这里会产生错误。

  我的解决方法是,定义一个扩充的属性TreeNodeSrcA,它不在server端被解析,而是原封不动的写到Browser side,然后Treeview的htc再读取TreeNodeSrcA指向的url的内容,并解析。

  具体步骤如下:

一、在Treeview的源程序treeview.cs文件的

public class TreeView : BasePostBackControl

的部分加入这样一段

/// <summary>
/// Url of the xml file to import as the TreeNode content of the tree, Browser Side Binding
/// </summary>
[
Category("Data"),
DefaultValue(""),
PersistenceMode(PersistenceMode.Attribute),
ResDescription("TreeNodeSrcA"),
]
public string TreeNodeSrcA
{
    get
    {
        object str = ViewState["TreeNodeSrcA"];
        return ((str == null) ? String.Empty : (string)str);
    }
    set
    {
        ViewState["TreeNodeSrcA"] = value;
    }
}

它的作用是定义一个叫TreeNodeSrcA的属性。

二、在Treeview的源程序treeview.cs文件的

protected override void RenderUpLevelPath(HtmlTextWriter output)

方法中加入这样一段

if (TreeNodeSrcA != String.Empty)
    output.AddAttribute("treeNodeSrcA", TreeNodeSrcA);

它的作用是如果TreeNodeSrcA属性非空则写到web页面的输出中。

三、编译生成dll文件并引用

四、在Treeview的脚本文件treeview.htc的相应位置分别加入:

<public:property name="treeNodeSrcA" id="_tvpropTreeNodeSrcA" GET="getTreeNodeSrcA" PUT="setTreeNodeSrcA" />

var prop_treeNodeSrcA = null;

function getTreeNodeSrcA()
{
    return prop_treeNodeSrcA;
}

function setTreeNodeSrcA(value)
{
    if (prop_treeNodeSrcA != value)
    {
        prop_treeNodeSrcA = value;
    }
}

这是说明定义一个htc里的属性,设置变量来存放,并设置读写它的方法。

五、在Treeview的脚本文件treeview.htc的function oncontentready()中,在
    if (treeNodeSrc != null)
之前,加入:
    if (treeNodeSrcA != null)
     treeNodeSrc = treeNodeSrcA;
这就保证了创建的时候,如果扩展属性treeNodeSrcA非空,就会用它来填补treeNodeSrc,这时Browser就会去读数据源并解析、绑定。

【athossmth原创,转载请注明,谢谢】

时间: 2024-10-30 05:56:21

分享:Microsoft IE Webcontrols Treeview的一个bug及修正的相关文章

Win7系统中TreeView的一个bug

问题描述 CheckBoxes设置为true注册AfterCheck事件随后双击勾选框,出现bug:勾选框变了两次,但是事件只激发了一次,并且此时Node的Check属性和勾选框是不一样的随后单击勾选框,出现bug:勾选框没变,但是Node的Check属性变了不知道大家是否遇到过这个bug? 解决方案 解决方案二:是你代码bug解决方案三:你看check属性变没变是在哪里看的,在你的事件里?解决方案四:如果点了2次,事件却只执行了1次,那check值不对不是太正常了

memory_limit的一个bug | 风雪之隅

原文:memory_limit的一个bug | 风雪之隅 27 Nov 09 memory_limit的一个bug 作者: Laruence( ) 本文地址: http://www.laruence.com/2009/11/27/1164.html 转载请注明出处 PHP 5.2x中, 由于错误的选用了zend_atoi, 导致memory_limit不能设置为超过4G的值. 今天同事分享给我一个问题(thans to yanmi), 一段代码(PHP 5.2.11 Linux/X86_64),

使CheckBoxList的Attributes属性生效(修改微软的一个bug)_实用技巧

本文将描述如何使CheckBoxList中的Item添加的Attribute在客户端生效,CheckBoxList是一个非常好用的组件,它支持数据绑定等特性.但是他和DropDownList有同样的一个问题,就是当我们向它们的Items里面Add项目的时候,如果希望给这些Item添加客户端行为,这些行为并不能体现在客户端,我们通常使用的方法如下: HTML页面部分如下: <asp:CheckBoxList id="CheckBoxList1" runat="server

!important在ie6下的一个BUG和CSS的优先级。

在没有DTD的声明的情况下,在同一个选择器样式(即同一个大括号里面)下,IE6,IE7,IE8对!important的解析都是无效的. 一 css的优先级 今天有人跟我说css hack中用!important来区分ie6,因为ie6不支持!important,是的在很早以前我也是用过这种方法写hack,但是后来就基本不用了.本来我对他谁的ie6不支持!important也没什么异议,可是正好在前几天正好用个这个!important属性解决了一个样式优先级的问题,而且是支持ie6的,这是为什么呢

BugZilla之外的选择——另一个 Bug 跟踪管理系统 Mantis 在 IIS5 下安装指南

最开始想找一个 Bug 跟踪管理系统时,是想用 BugZilla 的,但是在实际安装使用时发现在 Windows 下安装非常费劲,需要自己改动 n 多的地方才能获得一个可以在Windows下使用的 Hack 版本,而且邮件设置怎么都没有成功,最后只好放弃.  在网上查找BugZilla相关资料的时候发现了 Mantis,这也是一个开源的 Bug 跟踪管理系统,基于 PHP+MySQL,支持 Windows:相对于BugZilla,比较轻量级,不过对于我们的开发团队来说是完全够用了,所以我在放弃了

mysql数据库UPDATE语句一个bug分析

这个我认为的bug,反馈给MySQL官方,但是MySQL官方认为这并不是一个bug,并给出了解释,我认为这个解释是合理的,但是不可避免的是这条语句实在太危险了. 问题描述 示例表结构与表数据: # 表结构 mysql> show create table t; +-------+--------------------------------------------------------------------------------------------------------------

Science上发表的聚类算法,C++编程实现,有一个bug不知道怎么解决!!跪求大神!!!

问题描述 Science上发表的聚类算法,C++编程实现,有一个bug不知道怎么解决!!跪求大神!!! include<iostream> include<fstream>using namespace std; typedef struct sourcedata //声明了一个原始数据结构体 { int m; //矩阵的行rows int n; //矩阵的列columns double **data; //保存数据的二维指针 }SourceData; SourceData get

Win10系统菜单打不开问题的解决,难道是Win10的一个Bug ?

     Win10左下角菜单打不开,好痛苦,点击右下角的时间也没反应,各种不爽,折磨了我好几天,重装又不忍心,实在费劲,一堆开发环境要安装,上网找了很多方法都不适用.今天偶然解决了,仔细想了下,难道是Win10的一个Bug? 1.问题和现象             右下角菜单点不开,下面的状态栏的右键也没有反应.时间日期也点不开,音频喇叭同样点不开....各种烦人,百度一堆都无果.... 说明:Win10是正式版,已激活:杀毒也全盘扫描过,因为电脑是开发和办公用,几乎不上其他网站,所以中毒的可

与MySQL的注释、Query_cache有关的一个bug

今天有同学问了一个关于注释的问题,顺藤摸瓜发现一个bug,简要说明下. 有关注释的一些QA Q: MySQL注释有哪些格式 A:MySQL的注释格式有三种,分别是 /**/ -- 和 #.具体参见手册          Q:在一些导出文件中见过/*! xxx*/,是不是注释? A:  需要注意的是/*! */ 这种格式,对于MySQL来说不是注释,是能够直接执行的.同时这个格式还支持指定版本号,比如/*!50518 xxxx*/ 表示,若server端版本大于5518,则后续的xxxx作为语句的