我使用的Jquery Easyui 1.2.6
需求如下
現有數據列三列
Name,Age,CreateDate
數據
張三,18,2000-12-09 :12:34:56
李四,28,2000-12-09 :12:34:56
王麻子,38,2000-12-09 :12:34:56
Jquery Easyui DataGrid中列設置
{ field: 'Name', title: '名稱', width: 120 ,align:left},
{field: 'Age', title: '年齡', width: 120 ,align:right},
{ field: 'CreateDate', title: '創建日期', width: 120,align:center},
以上的align屬性對列表名和數據都有效,就是列名和數據對齊方式是一樣的,
--------------------- --------------------- ---------------------
要想不一樣,必須能夠單獨設置列名或者數據行,對column增加一個字段,
第一種方式,假設align針對列名有效,可以增加一個dataalign針對數據列有效
{ field: 'Name', title: '名稱', width: 120 ,align:center,dataalign:left},
{field: 'Age', title: '年齡', width: 120 ,align:center,dataalign:right},
{ field: 'CreateDate', title: '創建日期', width: 120,align:center,dataalign:left},
在onLoadSuccess添加如下代碼,針對每個數據列重新
onLoadSuccess: function (data) { var fields=$("#tt").datagrid('getColumnFields',false); //獲取數據表的每一行,注意如果不加.datagrid-view2限制,則含有行號表 var bodyTts = $(".datagrid-view2 .datagrid-body table tr.datagrid-row"); bodyTts.each(function (ii, objj) { //datagrid主體 table 的每一個tr 的td們 var bodyTds = $(objj).children(); bodyTds.each(function (i, obj) { //獲取當前列的信息 var col = $("#tt").datagrid('getColumnOption',fields[i]); if (!col.hidden && !col.checkbox) { var dataalign=col.dataalign||col.align||'left'; $("div:first-child", obj).css("text-align", dataalign); } }) }) }
這種方式的壞處在於數據一般很多,所以遍歷這些數據需要花比較多時間
--------------------- --------------------- ---------------------
第二種方式,假設column里面的align是針對數據有效的,另外增加一個headalign來設置表頭列對齊
{ field: 'Name', title: '名稱', width: 120 ,align:center,headalign:left},
{field: 'Age', title: '年齡', width: 120 ,align:center,headalign:right},
{ field: 'CreateDate', title: '創建日期', width: 120,align:center,headalign:left},
1 onLoadSuccess: function (data) { 2 var fields=$("#tt").datagrid('getColumnFields',false); 3 //datagrid頭部 table 的第一個tr 的td們,即columns的集合 4 var panel = $("#tt").datagrid("getPanel"); 5 var headerTds =panel.find(".datagrid-view2 .datagrid-header .datagrid-header-inner table tr:first-child").children(); 6 7 //重新設置列表頭的對齊方式 8 headerTds.each(function (i, obj) { 9 var col = $("#tt").datagrid('getColumnOption',fields[i]); 10 if (!col.hidden && !col.checkbox) 11 { 12 var headalign=col.headalign||col.align||'left'; 13 $("div:first-child", obj).css("text-align", headalign); 14 } 15 }) 16 }
其實上述兩段代碼可以看出,第二種方式開銷比第一種小很多,所以推薦第二種
紅色的#tt是我datagrid的id,請用的時候改成你自己的
上述兩種使用方法都是直接配置+代碼方式
--------------------- --------------------- ---------------------
第三種方式其實就是第二種 只不過算是擴展,使用起來更簡單
1 /** 2 * 擴展表格列對齊屬性: 3 * 自定義一個列字段屬性: 4 * headalign :原始align屬性針對數據有效, headalign針對列名有效 5 * 6 */ 7 $.extend($.fn.datagrid.defaults,{ 8 onLoadSuccess : function() { 9 var target = $(this); 10 var opts = $.data(this, "datagrid").options; 11 var panel = $(this).datagrid("getPanel"); 12 //獲取列 13 var fields=$(this).datagrid('getColumnFields',false); 14 //datagrid頭部 table 的第一個tr 的td們,即columns的集合 15 var headerTds =panel.find(".datagrid-view2 .datagrid-header .datagrid-header-inner table tr:first-child").children(); 16 //重新設置列表頭的對齊方式 17 headerTds.each(function (i, obj) { 18 var col = target.datagrid('getColumnOption',fields[i]); 19 if (!col.hidden && !col.checkbox) 20 { 21 var headalign=col.headalign||col.align||'left'; 22 $("div:first-child", obj).css("text-align", headalign); 23 } 24 }) 25 } 26 });
使用方法:
保存為jquery.easyui.datagrid2.js文件,引用
添加<script src="jquery.easyui.datagrid2.js" type="text/javascript"></script>
增加headalign屬性
{ field: 'Name', title: '名稱', width: 120 ,align:center,headalign:left}
-------------------------------------------------
第四種方式,源碼修改,終極大法
我是用Jquery Easyui 1.2.4的源碼(未經加密的)來說明的,其它版本大致應該不會相差很遠
其實主要就是text-align這個屬性上面
在源碼搜索text-align,第7929行有如下代碼(buildGridHeader方法內)
cell.css('text-align', (col.align || 'left'));
這句話就是修改列表頭的對齊方式.默認是left,也就是說不用設置,就是left
很明顯,還是套用第二種方式的,列增加headalign屬性,7929行改成
cell.css('text-align', (col.headalign||col.align||'left'));
然后,就結束了,哈哈
其實你要是喜歡針對數據列dataalign,9496行也有text-align(renderRow方法內)
style += 'text-align:' + (col.align || 'left') + ';';
可以用來等同第一種方式
style += 'text-align:' + (col.dataalign||col.align||'left') + ';';
如果你喜歡折騰源代碼,請使用第四種,最簡單,哈哈
如果你喜歡干凈的源碼,且配置少,代碼少,可以用第三種方式
如果你喜歡麻煩,可以用第二或者第一種方式
本文參考http://www.cnblogs.com/wujie6166/archive/2011/09/21/2184049.html的某些代碼.感謝原作者