zoukankan      html  css  js  c++  java
  • Ext、以及Coolite下实现表格锁定列和多行表头

          这段时间我们的项目中采用了Coolite来做富客户端,Coolite目前的版本是0.8.1,它所采用的Ext版本是2.2.1,因此下面主要是说明在这个版本下所实现的锁定列和多行表头,需要说明的是Ext在2.0版本以后就不自带锁定列功能了,只能自己实现,中国人的习惯和国外的不太一样,喜欢表格化得数据,而且形式又多种,表格最基本的功能之一,就是要锁定列和多行表头,而这两项又是Coolite和Ext所提供的组件中所没有直接包含的,虽然他们这两个框架没有提供,但依然要说的是Ext的js功能很强大, Coolite为Ext在Asp.net上的应用封装了绝大多数功能,还扩展了一部分,庞大的功能模块,非常不错,可以和官方开源封装的java版GWT2.0媲美。
         看了些废话,讲入主题了,看下效果图:

        

         实现锁定列目前较为常见的是继承Grid,然后重写模块,实现双表格,下面的示例是采用MeDavid所实现的锁定列方式,版本为[Update 5],Ext的代码很长就贴点主要和修正的,例子在后面有完整提供。Ext为这些控件都提供了一个模板的方式以供重写,就是重写了主模板.

    Code

         同时为ColumnModel增加getTotalLockedWidth方法,原有[Update 5]中的脚本中Ext.grid.LockingColumnModel要去掉。

    Code

          另外,版本为[Update 5]目前支持行选择模式有点BUG,就是在获得焦点时行会移动,这是因为没有重新定位造成的,在Ext.grid.LockingGridView中加入以下方法即可修正。

    Code

         多行表头分别对应有两个文件,一个是针对有锁定列的表格,一个是针对没有锁定列的表格,两个表格输出的对象是不一样的,要经过判断来输出不一样的值,至于实现的方式大家看下代码就知道了。

         下面把它融入进Coolite中。新建一个ExtGridPanel继承自GridPanel,然后重写OnPreRender如下:

    Code

         同时新增了几个类,新增类如下:ExColumnModel、ExtColumn、ExtGridPanel、ExtGroupHeaderGrid、ExtRow、ExtRowCollection、ExtRows、ExtRowsCollection这些,具体代码都在源码中可以自己分析。
    因为同一个表格同时要支持锁定列和非锁定列,因为功能不同输出的js也不一样,那么InstanceOfAttribute的ClassName类名要进行变动,所以要采用TypeDescriptor.GetAttributes来取得属性,这样可以保存当前实例所进行修改过后的自定义属性值,而用Type. GetCustomAttributes只能取得实例定义时的值,不能获得当前实例改动后的值,这一点要在Coolite.Ext.Web程序集的WebControl_Helpers类的GetClientConstructor方法和InstanceOf属性中进行修改,个人认为它是一个明显的BUG。

         其实涉及的变动的地方还挺多,上面仅仅是关键点,源码随文章发布,Coolite的源码可以去官方下来,下面也有链接。

         下载:锁定列和多表头源码    Coolite源码0.8.1
         项目需要用Vs2008打开,需要ASP.NET3.5支持,欢迎发表意见。

  • 相关阅读:
    【Xamarin开发 Android 系列 6】 Android 结构基础(上)
    SQL语句,标准表达式中数据类型不匹配
    VS工程目录下的ipch文件夹和.sdf文件
    VS2013和VS2010工具集和字符集
    SQL语句:语法错误(操作符丢失)在查询表达式中
    数据库改动后,发现第二张图片不能存储并显示
    BEGIN_MESSAGE_MAP(Caccess_test_1Dlg, CDialogEx)
    error C2678: 二进制“+”: 没有找到接受“const char [22]”类型的左操作数的运算符(或没有可接受的转换)没有与这些操作数匹配的“+”运算符
    MFC中给控件添加变量,DoDataExchange中
    数据库添加表时设置表名为中文
  • 原文地址:https://www.cnblogs.com/zhujiechang/p/1599930.html
Copyright © 2011-2022 走看看