`

GT-Grid 1.0 基础教程(十一)

阅读更多
GT-Grid 1.0 基础教程(十一)

教程说明:
这是一个告诉大家如何快速的利用GT-Grid开发列表的基础教程.以后会推出"高级教程".
查看其他教程,以及最新版本信息,请点击这里


第十一章: 工具栏与列表菜单


在前几章,我们或多或少的接触到了一些工具栏的知识.
例如 对  toolbarContent toolbarPosition 的使用.

这一章, 我们将对工具栏与列表菜单做更全面的介绍. 本章示例文件"mydemo11.html"



=========================================




首先,我们回顾一下toolbarPosition 和 toolbarContent 的作用:

toolbarPosition : 工具栏的位置. 可选值:'top'/'bottom'/null,  暂时不支持上下都显示.
toolbarContent : 设置工具栏上要显示的工具按钮,以及相对位置,各个按钮之间用空格间隔. 例如  toolbarContent : 'nav | state' .

toolbarPosition 无需多言,在这里再详细说一下toolbarContent.
toolbarContent 的值是一个字符串, 该字符串允许的内容如下:

|(竖线) : 标示"按钮组"(若干个按钮组成的功能相近的组,开发者可以自由定义) 之间的分隔符
nav	导航按钮, 包括 "首页 前一页 后一页 末页"  四个按钮 
goto	页面跳转按钮, 包括 输入目标页号的区域 和一个跳转的按钮
pagesize	改变每页记录条数的下拉框
reload	刷新按钮
add	"+"添加记录
del	"-"删除记录
save	保存变更的按钮
print	打印按钮
filter	过滤按钮
chart	柱状图表按钮
state	显示数据的数量信息(分页信息),如共几条 共几页 当前是第几条等等


各个关键字之间用空格分割, 各个关键字的位置决定了各个元素的相对位置,开发人员可以自行设置.
注意工具栏中的"pagesize" 要与 grid的pageSizeList属性配合使用. (详见教程第三章)


其中"过滤"和"图表"两项再具体说一下.



=========================================




"过滤"是针对列进行的,而且各个过滤条件是and的关系.
如果不希望某列参与过滤, 那么只需在column定义中 指定 filterable 属性为false即可 (默认是true)
//某列定义
{	
	 /* ... 略去其他属性设置 ...*/
	filterable : true ,	//是否允许该列参与过滤
}

过滤值输入框(填写过滤值的地方),默认是一个普通的input-text框,如果某列需要使用其他输入框,那么可以在该列的定义中,设置 filterField 属性:

//某列定义
{	
	filterField : GT.U.createSelectHTML( {'0': '未知' ,'1':'男', '2':'女'} )
}

filterField 属性的值为合法的 HTML字符串 , 该字符串为"列需要使用的过滤输入框"的html代码.
(注: 该属性以后会进一步强化, 支持dom对象等)


在"过滤"对话框中, 选择某一列,点击"添加条件" 然后在新增的条目中选择 条件关系 和条件值 即可.

默认的过滤方式是客户端的过滤. 关于服务端过滤, 以及过滤的具体特性和用法, 以后会单独编写一个章节来介绍.



=========================================





注意: GT-Grid 1.0里的图表功能目前还很简单,功能性和实用性都不是很强.
以后版本会做加强和变更, 如果目前不需要, 可以略过此小节(下一行 至 分割线).


欲使用图表功能, 需引入下面的js.
<script type="text/javascript" src="./flashchart/fusioncharts/FusionCharts.js"></script>


同时还要 设置 grid的 GTGridPath 属性, 该属性为 GT-Grid组件的代码所在的路径.(可以是绝对路径,也可以是相对于当前页面的相对路径)
示例中, 使用的是相对路径 :
var gridConfig={
	/* ... 略去其他属性设置 ...*/
	
	GTGridPath : '../../gt-grid',
}



"图表"功能会用一个柱状图显示选中记录的字段值(某些列的值). 如果希望记录的某列显示在图表里,那么只需在column定义中 指定下列属性即可:
//某列定义
{	
	 /* ... 略去其他属性设置 ...*/
	inChart : true ,	// 是否出现在图表里
	chartColor : '66eeaa',	// 出现在图表里时 ,柱状图的颜色(不带#号)

	chartCaption : '{@} 的成绩' , //设置图表的标题. 该属性只需设置在"要作为图表标题"的列上, 其中"{@}" 代表的是选中记录的该列的值.

}


其中 chartCaption ,在补充说明一下. 如果将 chartCaption 设置在 学生姓名列上, 然后 值为 '{@} 的成绩',
那么在 "张三"的成绩图表时, 图表的标题就会是 "张三的成绩", 也就是说,那个'{@}'会被替换为 当前记录的"学生姓名".




=========================================




大家在示例中还可以看到一个"列表菜单"的按钮,它类似windows的开始菜单按钮,总是出现在工具栏的最左边.
这个按钮的显示与否 是通过 grid的  showGridMenu 属性决定: (默认是false)

var gridConfig={
	/* ... 略去其他属性设置 ...*/
	
	showGridMenu : true 
}


此时,该菜单上只有一个版本信息, 并没有其他的条目, 显示其他菜单条目需要下列属性:(默认是true)

var gridConfig={
	/* ... 略去其他属性设置 ...*/
	
	showGridMenu	: true ,
	allowCustomSkin	: true ,	//是否开启主菜单上的皮肤选择选项
	allowGroup	: true ,	//是否开启主菜单上的列编组选项
	allowFreeze	: true ,	//是否开启主菜单上的冻结列选项
	allowHide	: true ,	//是否开启主菜单上的隐藏列选项

}


目前菜单上的这些条目暂时不允许调整位置,也不允许添加自定义的条目.


如果开启了皮肤选择功能, 页面内还要引入皮肤相关的css, 而且这些css要放到 GT-Grid的主css后面, 示例:
<link rel="stylesheet" type="text/css" href="./gt_grid.css" />
<link rel="stylesheet" type="text/css" href="./skin/china/skinstyle.css" />
<link rel="stylesheet" type="text/css" href="./skin/vista/skinstyle.css" />
<link rel="stylesheet" type="text/css" href="./skin/mac/skinstyle.css" />



冻结列 隐藏列 列编组 三个功能项都是针对列的, 如果开发人员不希望某列具备该功能,则只需在column定义中 指定下列属性为false即可 (默认是true)


//某列定义
 {	
	 /* ... 略去其他属性设置 ...*/
 	groupable : true,	//是否允许对该列进行编组
	frozenable : true,	//是否允许冻结该列
	hideable : true,	//是否允许隐藏该列
}





=========================================




本章对列表的工具栏和列表菜单的使用 做了进一步的介绍. 我想没有本章内容, 大家通过前几章的示例多少也能理解这些知识点.
这一章就算做对相关知识的一个回顾和总结吧. 我们下一章再见.


分享到:
评论
18 楼 Freaky 2009-05-27  
toolbarContent 能不能自定义?
17 楼 supercrsky 2009-05-06  
// 注册自定义工具按钮
GT.ToolFactroy.register(
'mybutton',  //按钮的标识 (请使用全小写字母)
{
cls : 'mybutton-cls', 
// 按钮的提示信息
toolTip : '为指定用户分配角色',

// 点击按钮时 执行的动作
action : function(event,grid)
{
   alert(event.id);
   alert(grid.columns[0].render) 
}
}
);


能否说下event,grid的api ?  或常用属性和函数?
想自定义事件,没法做啊。不知道有什么属性和函数。。谢谢
16 楼 lix23 2008-11-27  
期待看到换肤、导出excel、柱状图 等高级功能的教程。:)
15 楼 fcw528 2008-10-15  
期待服务端过滤相关的东东,不知fins何时能够推出!
14 楼 fins 2008-08-29  
引用
如果点击reload,可不可以将保存时出现的异常语句“{success:false,exception:'exception'}”设置为"{success:true,exception:''}"


这句话我没明白

你要在哪里设置?? gt内部从来没有设置过这个东西啊
异常信息是开发人员在后台自己设置的啊
13 楼 itlieying 2008-08-29  
如果可以的话,那该怎么操作?
12 楼 itlieying 2008-08-29  
toolbarContent 下的reload刷新时重新从后台加载数据,

如果点击reload,可不可以将保存时出现的异常语句“{success:false,exception:'exception'}”设置为"{success:true,exception:''}"
11 楼 fins 2008-08-26  
好老头 写道
toolbarContent 可以自己扩展么


下一个版本会支持
10 楼 fins 2008-08-26  
itlieying 写道
fins,
请教个问题,我在colsConfig中的第一列加了一个属性editor: dialogEditor
dialogEditor也已义好了的,
var dialogEditor = function(){
var myd = new GT.Dialog({
id: "sqlEditor",
gridId : "grid1" ,
width: 500 ,
height:250 ,
title : '编辑器' ,
body : ['<textarea id="text_input" rows="12" cols="20" style="width:99%"></textarea><br/>',
'<input type="button" value="确定" onclick="GT.$grid(\'grid1\').activeDialog.confirm()"/>'].join(''),
getValue : function(){
return GT.$("text_input").value;
},
setValue : function(value){
GT.$("text_input").value = value;
},
active : function(){
GT.U.focus(GT.$("text_input"));
}
});
return myd;
};
当单击此列当中的某一单元格时,会弹出一个对话框,但是点击不了确定,页面报“对象不支持此属性或方法”,我采用了奥运版的gt-grid



GT.Dialog 改为 GT.DialogEditor 试一试
9 楼 tangrenzhong116 2008-08-22  
怎么过滤去起呢?
8 楼 好老头 2008-08-21  
toolbarContent 可以自己扩展么
7 楼 itlieying 2008-08-18  
fins,
请教个问题,我在colsConfig中的第一列加了一个属性editor: dialogEditor
dialogEditor也已义好了的,
var dialogEditor = function(){
var myd = new GT.Dialog({
id: "sqlEditor",
gridId : "grid1" ,
width: 500 ,
height:250 ,
title : '编辑器' ,
body : ['<textarea id="text_input" rows="12" cols="20" style="width:99%"></textarea><br/>',
'<input type="button" value="确定" onclick="GT.$grid(\'grid1\').activeDialog.confirm()"/>'].join(''),
getValue : function(){
return GT.$("text_input").value;
},
setValue : function(value){
GT.$("text_input").value = value;
},
active : function(){
GT.U.focus(GT.$("text_input"));
}
});
return myd;
};
当单击此列当中的某一单元格时,会弹出一个对话框,但是点击不了确定,页面报“对象不支持此属性或方法”,我采用了奥运版的gt-grid
6 楼 fins 2008-08-12  
如果想冻结某一列,某一列的column里头加入属性
frozen : true

或者是通过菜单来实现.

====================

页面报错:'freezeRows'未定义
8月8号正式版中 应该没有此bug了
====================
移动左右滚动条时,第一列不动,第二列,第三列移动……

冻结列就是这个效果

5 楼 itlieying 2008-08-12  
移动左右滚动条时,第一列不动,第二列,第三列移动……
4 楼 itlieying 2008-08-12  
请教个问题:
如果想冻结某一列,是不是只要在某一列的column里头加入属性
grouped : !true , frozen : !false , syncRefresh : false

下午这样试了一下,页面报错:'freezeRows'未定义
请问这个问题出在哪?
3 楼 itlieying 2008-08-12  
嗯,是啊,下午在试了几个,后来发现,只能在各列的column的width里头设置一下固定的长度, 而且长度还不能带px或%单位
2 楼 fins 2008-08-12  
如果你的需求仅仅是"每列的宽度要一样的" 那么可以设置 column的width都是一样的就可以了

不过 我想你的意思应该是是否支持 百分比列宽 以及自动填满列表宽度 或自动适应列表宽度吧?

目前版本还不支持
1 楼 itlieying 2008-08-12  
fins:
每列的宽度如果要一样的,怎么设置?

相关推荐

Global site tag (gtag.js) - Google Analytics