终于搞定了cxgrid的多行表头(转终于搞定了cxgrid的多行表头 )
终于搞定了cxgrid的多行表头
转自:http://mycreature.blog.163.com/blog/static/556317200772524226400/
这一周都在处理dbgrideh向cxgrid迁移的问题,在感叹cxgrid功能强大的同时不得不面对这种强大带来的高昂的学习成本,然后就开始感叹相关材料的缺乏。虽然可以从cxgrid的帮助文件中获取相当多有用的信息,但帮助文档中的内容更多集中在设计时的设置,对于运行时的设置的介绍相当有限,而项目里的grid大都是动态配置生成的;而网络上关于cxgrid的资料就更少了,翻来覆去都是转载自那两三篇源文章的内容。于是就出现了为了实现一个类似图一的多行表头而花了我快两天的时间的状况。
(图一)
dbgrideh中的实现
dbgrideh中设置多行表头的实现很简单,把UseMultiTitle属性设置为true,然后设置带层次结构的列标题。 列标题的层次结构设置规则为: 列标题可以由多个层次组成,不同层次内容用"|"分割开,dbgrideh会自动处理层次之间的相同和不同内容。
范例代码如下: DBGridEh.Columns[0].Title.Caption := '年段|1班'; DBGridEh.Columns[1].Title.Caption := '年段|2班';
cxgrid中的实现
cxgrid中设置多行表头的实现主要通过列中的Position.BandIndex属性来设置,该属性用来设置某个band对应的上级band。把如果把某个band的Position.BandIndex指定上一个band的序号,则该band则会出现在上一个band的所处列的下方。
范例代码如下: //增加单元的实现方法 procedure addBandImpl(view:TcxGridDBBandedTableView;cptText:String;align:TAlignment;append:boolean); const MC_OFFSET_PARENT = 1; var idx : Integer; begin idx := view.Bands.Count; with view.Bands.Add do begin Caption := cptText; Alignment := align; Position.ColIndex := idx; if append then Position.BandIndex := idx-MC_OFFSET_PARENT else Position.BandIndex := idx; Options.HoldOwnColumnsOnly := true; end; end;
//增加列的首个单元格 procedure addCXBand(view:TcxGridDBBandedTableView;cptText:String;align:TAlignment=taCenter); begin addBandImpl(view,cptText,align,false); end;
//增加列的后续单元格 procedure appendCXBand(view:TcxGridDBBandedTableView;cptText:String;align:TAlignment=taCenter); begin addBandImpl(view,cptText,align,true); end;
//增加规格列表单元格 procedure addBandsOfSpecList(view:TcxGridDBBandedTableView;colIdx:Integer;objList:TObjectList); var objIdx : Integer; specText : String; holder : TSpecHolder; begin for objIdx:=0 to objList.Count-1 do begin //构造band的名称(TSpecHolder中存储每个规格行对应的具体规格项,数目不等) holder := TSpecHolder(objList[objIdx]); if holder.getSpecCount>colIdx then specText := holder.getSpecItems[colIdx] else specText := ''; //判断是否新增一列 if objIdx=0 then addCXBand(view,specText,taCenter,false) else appendCXBand(view,specText); end; end;
两种实现方式比较
如果把多表头当作二维表来看待的话,dbgrideh多表头的实现方式是通过从左到右设置包含行信息("|"用来区分不同行)的列来完成的,而cxgrid则是通过从上到下、从左到右设置单元格信息来完成的:首先为每一列指定所处列序号,然后顺序增加该列中的所有单元格,完成后再进行下一列的设置
终于搞定了cxgrid的多行表头(转终于搞定了cxgrid的多行表头 )的更多相关文章
- iOS开发——实用技术OC篇&8行代码教你搞定导航控制器全屏滑动返回效果
8行代码教你搞定导航控制器全屏滑动返回效果 前言 如果自定了导航控制器的自控制器的leftBarButtonItem,可能会引发边缘滑动pop效果的失灵,是由于 self.interactivePop ...
- Axure中继器基础教程(增行、删当前、标记、全部、规则行) Mark
---恢复内容开始--- 一.中继器的新增行 中继器所显示的列表项与中继器的数据集有关,默认情况下是一一对应的.也就是说,中继器数据集中有多少行数据,那么,列表项就有多少个. 那么,我们能不能通过新增 ...
- java,编写一个从1循环到150并在每行打印一个值,另外在每个3的倍数行上打印出foo,在每个5的倍数行上打印biz,在每个7的倍数上打印baz.
需求:编写一个从1循环到150并在每行打印一个值,另外在每个3的倍数行上打印出foo,在每个5的倍数行上打印biz,在每个7的倍数上打印baz. package study01; public cla ...
- 行内元素与块级元素的区别,行内块级元素在IE8-的兼容性
行内元素与块级元素的区别 行内元素最好不要包裹块级元素,但是块级元素可以任意的包裹行内元素 行内元素如果其上一个元素也是行内元素,则他们会分布在统一水平线上,即在一行上排列,块级元素不论上一个元素是行 ...
- Creator 2.2.0 终于等来了这款Shader组件神器!一招搞定Effect特效
先看下视频演示: ShaderHelper2支持Creator 2.2.0 视频录完后才想起,还没在微信小游戏中测试,赶紧试试,下面是在微信开发者工具中的截图. 径向模糊 探照灯 提供了一个Shade ...
- 几行代码把Chrome搞崩溃之:HTML5 MP3录音由ScriptProcessorNode升级成AudioWorkletNode采坑记
关键词: STATUS_ACCESS_VIOLATION AudioContext AudioWorkletNode audioWorklet addModule resume suspended c ...
- 如何修改word文档中每行字符的最大默认值和每页最大行数默认值
事情起因是这样的,小明在写论文的过程中,发现自己的文档的字与字的间距看起来比其他人的字符间距大,于是觉得奇怪,明明设置了一样的格式啊,设置每行38个字符,每页34行,为什么小明写的文档字符间距看着比较 ...
- 非IT人士的云栖酱油之行 (程序猿迷妹的云栖之行)
摘要: 熟悉我的人都知道,我是一个贪玩儿且不学无术的姑娘,对于互联网我也是知之甚少:这次去到杭州参加阿里巴巴集团主办的为期4天的科技大会也是很例外:但是不得不说这次的会议真是让我很震惊.今天我就和大家 ...
- 获取当前方法名,行号,类名,所在java文件第几行
public class Demo { public static void main(String[] args) { Demo demo = new Demo(); demo.go(); } pu ...
随机推荐
- 开通cnblogs博客
开通博客,准备记录学习和开发过程
- solidity语言7
单位和全局变量 Ether Units: wei, finney, szabo, ether Time Units: 1 == 1 seconds 1 minutes == 60 seconds 1 ...
- 利用SQL Server Management Studio(SSMS)复制数据库
利用SQL Server Management Studio(SSMS)复制数据库 标签(空格分隔): SQLServer 前言 今天由于客户购买的软件版本确认了,而之前进行开发的本地数据库版本较低, ...
- ZT在谷歌上班感受如何?
在谷歌上班感受如何? 2013-11-05 作者:腾讯科技 出处: 互联网 责编:zlu 在谷歌这家全球最大最有抱负的技术公司工作将是怎样的情景呢?是天堂般的享受,还是地狱般的折磨呢?下面看一 ...
- selenium+python自动化登录脚本
利用selenium+python写的一个关于登录的自动化脚本
- bzoj3816 矩阵变换
Description 给出一个 N 行 M 列的矩阵A, 保证满足以下性质: M>N. 矩阵中每个数都是 [0,N] 中的自然数. 每行中, [1,N] 中每个自然数都恰好出现一次.这意味着每 ...
- Jmeter 登陆性能测试
1.打开Jmeter,新建一个线程组:测试计划--添加--Threads(users)---线程组 如图: 2.首先要添加一个HTTP默认请求,为什么要添加这个呢? 如果要测试的系统域名或者IP地址是 ...
- 【洛谷P2947】向右看齐
向右看齐 题目链接 此题可用单调栈O(n)求解 维护一个单调递减栈,元素从左到右入栈 若新加元素大于栈中元素,则栈中元素的仰望对象即为新加元素 每次将小于新加元素的栈中元素弹出,记录下答案 #incl ...
- Android学习笔记_59_清除sdcard缓存
对于手机来说,每个软件在安装时,都会在sdcard上创建一个目录,用于缓存文件.市场上针对这些软件,统一了它的sdcard上的目录,将缓存目录存放到数据库中.如果要清理,可以根据当前应用包的名称,到数 ...
- Android学习笔记_29_样式和主题
一.简单样式定义和使用: android中的样式和CSS样式作用相似,都是用于为界面元素定义显示风格,它是一个包含一个或者多个view控件属性的集合.如:需要定义字体的颜色和大小. 在Android中 ...