1. 程式人生 > >Jqgrid合併單元格,左右合併,上下合併

Jqgrid合併單元格,左右合併,上下合併

先看樣例,下圖為普通html表格的合併單元格,程式碼在下面,把他儲存為html檔案開啟就行

縱向合併:rowspan:a合併a行並表示,需要把後面a-1的單元格隱藏display:none 

橫向合併:colspan:a合併a行並表示 需要把後面a-1的單元格隱藏display:none 

 index.html

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>表格顯示</title>
</head>
<body>
		<table  border="1" cellspacing="0" cellpadding="0" width="120px">
			<tr>
				<td colspan="2">1</td>
				<td style="display:none">2</td>
				<td>3</td>
			</tr>
			<tr>
				<td>4</td>
				<td>5</td>
				<td>6</td>
			</tr>
			<tr>
				<td rowspan="2">7</td>
				<td>8</td>
				<td>9</td>
			</tr>
			<tr>
				<td style="display:none">10</td>
				<td>11</td>
				<td>12</td>
			</tr>
		</table>
</body>
</html>

 之後我們來說jqgrid的合併

原理其實是一樣的,只是jqgrid是動態載入資料的,所以我們得動態的給每個需要合併的單元格設定id

cellattr: function(rowId, tv, rawObject, cm, rdata) {
   //合併單元格
   return 'id=\'id' + rowId + "\'";
}

 之後是jqgrid完成後自動呼叫的一個方法:

gridComplete: function() {
	//在gridComplete呼叫合併方法
	var gridName = "gridTable";
    //動態合併縱行
	MergerRowspan(gridName, 'id');
    //寫死合併橫行(因為橫行一般是我們定義的固定數,
    //所以你可以根據我下面的例子自己加條件,合併哪些橫行,我這裡就寫死了,哈哈)
	MergerColspan(gridName,8, 'id','userName');
	}

這裡是上面呼叫函式的程式碼

合併縱行無需修改,直接呼叫

//公共呼叫方法合併單元格(無需修改)
		function MergerRowspan(gridName, CellName) {
			//得到顯示到介面的id集合
			var mya = $("#" + gridName + "").getDataIDs();
			//當前顯示多少條
			var length = mya.length;
			for (var i = 0; i < length; i++) {
				//從上到下獲取一條資訊
				var before = $("#" + gridName + "").jqGrid('getRowData', mya[i]);
				//定義合併行數
				var rowSpanTaxCount = 1;
				for (j = i + 1; j <= length; j++) {
					//和上邊的資訊對比 如果值一樣就合併行數+1 然後設定rowspan 讓當前單元格隱藏
					var end = $("#" + gridName + "").jqGrid('getRowData', mya[j]);
					if (before[CellName] == end[CellName]) {
						rowSpanTaxCount++;
						$("#" + gridName + "").setCell(mya[j], CellName, '', { display: 'none' });
					} else {
						rowSpanTaxCount = 1;
						break;
					}
					$("#" + CellName + "" + mya[i] + "").attr("rowspan", rowSpanTaxCount);
				}
			}
		}

合併橫行,可以根據需要重寫這個方法

//公共呼叫方法合併單元格(根據需要修改修改)
		function MergerColspan(gridName,rowId,id,CellName) {
			
			$("#" + gridName + "").setCell(rowId, id, '', { display: 'none' });
			$("#" + CellName + "" + rowId + "").attr("colspan", 2);
			
		}

 就是這樣了,下面貼一下完整程式碼和示例

示例:

html

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>jqgrid</title>
<!-- jqgrid -->
<link rel="stylesheet" href="static/css/jqgrid/ui.jqgrid-bootstrap.css"/>
<style>
html, body {  
   margin: 0;
   padding: 0;
   font-size: 75%;
}
</style>
<!-- 表格jqgrid -->
	<script src="static/js/jquery-1.9.1.js"></script>
    <script src="static/js/jqgrid/jquery.jqGrid.min.js"></script>
    <script src="static/js/jqgrid/grid.locale-cn.js"></script>
    <script src="static/js/index.js"></script>
</head>
<body>
		<table id="gridTable" border="1" cellspacing="0" cellpadding="0"></table>
</body>


</html>

js

$(function(){
		jQuery("#gridTable").jqGrid({
			                datatype: "local",
			                height: 250,
			                colNames:['編號','使用者名稱', '性別', '郵箱', 'QQ','手機號','出生日期'],
			                colModel:[
			                        {name:'id',index:'id', width:60, sorttype:"int",
																						cellattr: function(rowId, tv, rawObject, cm, rdata) {
																							//合併單元格
																							return 'id=\'id' + rowId + "\'";
																						}},
			                        {name:'userName',index:'userName', width:90,cellattr: function(rowId, tv, rawObject, cm, rdata) {
																							//合併單元格
																							return 'id=\'userName' + rowId + "\'";
																						}},
			                        {name:'gender',index:'gender', width:90},
			                        {name:'email',index:'email', width:125,sorttype:"string"},
			                        {name:'QQ',index:'QQ', width:100},                
			                        {name:'mobilePhone',index:'mobilePhone', width:120},                
			                        {name:'birthday',index:'birthday', width:100, sorttype:"date"}                
			                ],
			                sortname:'id',
			                sortorder:'asc',
			                viewrecords:true,
			                rowNum:5,
			                rowList:[5,10,15],
			                pager:"#gridPager",
			                caption: "第一個jqGrid例子",
							gridComplete: function() {
								//在gridComplete呼叫合併方法
								var gridName = "gridTable";
								MergerRowspan(gridName, 'id');
								MergerColspan(gridName,8, 'id','userName');
								  }
			        }).navGrid('#pager2',{edit:false,add:false,del:false});
			        var mydata = [
			                {id:"1",userName:"polaris",gender:"男",email:"[email protected]",QQ:"33334444",mobilePhone:"13223423424",birthday:"1985-10-01"},
			                {id:"1",userName:"李四",gender:"女",email:"[email protected]",QQ:"222222222",mobilePhone:"13223423",birthday:"1986-07-01"},
			                {id:"3",userName:"王五",gender:"男",email:"[email protected]",QQ:"99999999",mobilePhone:"1322342342",birthday:"1985-10-01"},
			                {id:"4",userName:"馬六",gender:"女",email:"[email protected]",QQ:"23333333",mobilePhone:"132234662",birthday:"1987-05-01"},
			                {id:"5",userName:"趙錢",gender:"男",email:"[email protected]",QQ:"22222222",mobilePhone:"1343434662",birthday:"1982-10-01"},
			                {id:"6",userName:"小毛",gender:"男",email:"[email protected]",QQ:"4333333",mobilePhone:"1328884662",birthday:"1987-12-01"},
			                {id:"7",userName:"小李",gender:"女",email:"[email protected]",QQ:"21122323",mobilePhone:"13220046620",birthday:"1985-10-01"},
			                {id:"8",userName:"王先生",gender:"男",email:"[email protected]",QQ:"242424366",mobilePhone:"1327734662",birthday:"1988-12-01"},
			                {id:"9",userName:"孫先",gender:"男",email:"[email protected]",QQ:"76454533",mobilePhone:"132290062",birthday:"1989-11-21"}
			                ];
			        for(var i=0;i<=mydata.length;i++)
			                jQuery("#gridTable").jqGrid('addRowData',i+1,mydata[i]);  
		
		
		
		//公共呼叫方法合併單元格(無需修改)
		function MergerRowspan(gridName, CellName) {
			//得到顯示到介面的id集合
			var mya = $("#" + gridName + "").getDataIDs();
			//當前顯示多少條
			var length = mya.length;
			for (var i = 0; i < length; i++) {
				//從上到下獲取一條資訊
				var before = $("#" + gridName + "").jqGrid('getRowData', mya[i]);
				//定義合併行數
				var rowSpanTaxCount = 1;
				for (j = i + 1; j <= length; j++) {
					//和上邊的資訊對比 如果值一樣就合併行數+1 然後設定rowspan 讓當前單元格隱藏
					var end = $("#" + gridName + "").jqGrid('getRowData', mya[j]);
					if (before[CellName] == end[CellName]) {
						rowSpanTaxCount++;
						$("#" + gridName + "").setCell(mya[j], CellName, '', { display: 'none' });
					} else {
						rowSpanTaxCount = 1;
						break;
					}
					$("#" + CellName + "" + mya[i] + "").attr("rowspan", rowSpanTaxCount);
				}
			}
		}
		
		//公共呼叫方法合併單元格(根據需要修改修改)
		function MergerColspan(gridName,rowId,id,CellName) {
			
			$("#" + gridName + "").setCell(rowId, id, '', { display: 'none' });
			$("#" + CellName + "" + rowId + "").attr("colspan", 2);
			
		}

	});
	

 其他的引用就自己下了,這裡不好上傳。

相關推薦

ThinkPHP呼叫Excel類的基本用法設定(合併單元,Sheet表標題行高列寬字型邊框樣式)

合併單元格+字型樣式 //合併單元格 $objPHPExcel->getActiveSheet(0)->mergeCells('A1:R1'); //為合併單元格新增標題 $objPHPExcel->setActiveSheetIndex(0)

table固定表頭行及列其中行包含合併單元(支援IE但滑鼠滾動輪滾動效果不太友好)

PS:該程式碼用於學習,大部分不是原創,在他(她)人程式碼的基礎上修改成自己想實現的效果,來源不明,因此沒有加轉載連結,如有問題,先在這裡抱歉,請聯絡我刪除。 內容實現的效果與上一篇一樣,但是這個這個用了一點點js去實現IE沒有辦法相容的一些屬性,所以這個版本可以相容IE的高版本和低版本,測試用的版本時IE8

POI合併單元邊框顯示問題笨方法解決。如有更好的方法歡迎留言求指教告知

網上找了好多關於POI合併單元格的文章,無奈智商捉雞,玩不出來,最後弄了個最麻煩的 //匯出excel,含有合併單元格 @Testpublic void exoprtExc_MergedRegion() {String realpath = PoiTemplate.cla

AsposeWords操作表格合併單元(word已經有的table 列 合併 指定兩個單元 既可以橫向合併也可以縱向合併)-http://www.xiaoguo123.com/p/aspose_w

20180725 親測可以 xjh 強大的AsposeWords for java不僅支援建立表格,還支援合併單元格。今天就簡明扼要記錄下如何實現合併單元格。 大家可以完全套用本文提供的程式碼,只需要提供開始和結束的單元格即可實現合併,無需理解複雜的過程,真是簡潔好用啊。 此

Jqgrid合併單元左右合併上下合併

先看樣例,下圖為普通html表格的合併單元格,程式碼在下面,把他儲存為html檔案開啟就行 縱向合併:rowspan:a合併a行並表示,需要把後面a-1的單元格隱藏display:none  橫向合併:colspan:a合併a行並表示 需要把後面a-1的單元格隱藏di

vue中 表頭th 合併單元且表格列數不定的動態渲染方法

吐槽 今天,在vue中遇到 複雜表格的渲染 ,需要合併表頭的單元格,且合併單元格的那列還是動態資料,也就是說你不知道會有多少組要合併起來,哎,我也有點說不清楚,廢話不多說了,看程式碼把: 程式碼示例 data資料是後端介面返回的,其中的資料格式是這樣的: [ { "studentId

Aspose.Cells 首次使用用到模版填充資料合併單元換行-https://www.cnblogs.com/gylspx/p/5961070.html

Aspose.Cells 首次使用,用到模版填充資料,合併單元格,換行 Aspose.Cells 首次使用,用到模版填充資料,合併單元格,換行 模版格式,圖格式是最簡單的格式,但實際效果不是這種,實際效果圖如圖2 圖2 ,注意看紅色部分,一對一是正常的,但是有一對多的訂單,就得把前

jxl生成表格(合併單元字型樣式。。。)

public static String testEx() { // a, 計算路徑 SimpleDateFormat sdf = new SimpleDateFormat("/yyyy-MM-dd/"); String datePath = sdf.form

JS生成表格合併單元

在網上找了這麼多都沒有JS生成表格然後JS操作合併單元格的,或者是別人寫的太負責了,又不想去理解,所以就自己動手寫了個簡單點的。 其實程式碼也不多,思路清晰就基本上可以了。一開始的時候是被colspan

HSSFWorkbook——匯出excel動態合併單元

一 前言 開發中,對於匯出一個excel表格這樣的功能很常見,這裡談談我所知道的相關知識 二 需求  匯出某個套餐所關聯的所有專案的一個Excel表格 三 HSSFWorkbook //建立一個Excel檔案 HSSFWorkbook&

table:表格設定table-layout:fixed屬性後如果表格中第一行出現合併單元那麼後面tr中的td設定寬度無效

針對上面的問題,現在又兩種解決方法:  1 在表格的第一行設定一個隱藏的行如下:<tablestyle="table-layout: fixed; width:100%;">    <trstyle="display:none">        <

利用Freemarker生成doc檔案(包含list迴圈ifelse判斷合併單元嵌入表格單元字數過多報錯等)

1、利用office等軟體開啟doc文件,另存為word2003xml形式的檔案。 2、修改xml中的需要動態生成的值,Freemarker變數為${data}格式的,修改完改成ftl字尾,複製到載入

phpexcel的居中顯示合併單元

phpexcel的居中顯示 所有單元格居中: $objPHPExcel->getDefaultStyle()->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZO

關於POI設定SHEET名稱以及合併單元複製單元方法

//SHEET命名 Workbook workbook = ReadExcel.openExcleFile(srcXlsxPath); // 獲取合同到期工作簿 Sheet sheet1 = workbook.getSheetAt(0);// 獲取頁籤 wo

Java匯出Excel表POI 實現合併單元以及列自適應寬度

 //字型          HSSFFont font = workbook.createFont();          font.setFontName("仿宋_GB2312");          font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗體顯示

poi匯出excel時合併單元求和不正確即“假”合併

excel中所謂“真假”合併單元格 真合併:我們選擇一段連續的單元格,點選合併,這時候,EXCEL會提示如果合併只會顯示第一個單元格的資料,而且其他單元的的資料也會沒掉. 假合併:如果我們用一個已經合併的單元格,格式刷要合併的單元格,這時候沒有提示資料丟失的.事實上,這時候

Laravel Excel實現Excel/CSV檔案匯入匯出的功能詳解(合併單元設定單元樣式)

Laravel Excel實現Excel/CSV檔案匯入匯出(合併單元格,設定單元格樣式) 這篇文章主要給大家介紹了關於在Laravel中如何使用Laravel Excel實現Excel/CSV檔案匯入匯出功能的相關資料,文中通過示例程式碼介紹的非常詳細,對大

java使用POI匯入Excel並判斷合併單元停止迴圈

public class ExcelCell { public static boolean isMergedRegion(HSSFSheet sheet,int row ,int colu

java將資料匯出帶有合併單元的excel--jxls技術

        jxls技術可以生成各種樣式的報表,非常好用,深深地喜歡上了這個。說起用這個還是比較有意思的,當時專案有個匯出表格的功能,但是沒能合併單元格,客戶不是很滿意,當時專案中大家都說弄不了,我想著自己網上查查吧,就查到了這個,試了一下午完成了,很有成就感哪,哈哈。

java poi匯出Excel表合併單元

其他參考文章: http://www.cnblogs.com/bmbm/archive/2011/12/08/2342261.html http://www.cnblogs.com/xuyuanjia/p/5886056.html 這是一個struts2的act