`

关于Jquery jqGrid的使用

 
阅读更多
官方文档http://www.trirand.com/jqgridwiki/doku.php?id=wiki:jqgriddocs

jqGrid使用总结 http://blog.csdn.net/wpcxyking/article/details/5909180
jqGrid的属性列表: http://www.helloweba.com/view-blog-162.html
jqgrid 的一些操作 动态增加列 用本地 数据 修改表格 http://www.17jquery.com/javascript/47180/
初始化JqGrid的方法大概参数http://www.cnblogs.com/zzjj296/archive/2009/11/29/1613341.html
jqGrid操作说明 http://wenku.baidu.com/view/e4a66b8683d049649b6658bf
jqGrid 属性说明 http://www.cnblogs.com/Gavinzhao/archive/2010/11/26/1888503.html
jqGrid中文说明文档-事件http://www.helloweba.com/view-blog-163.html
jqGrid中文说明文档-方法 http://a3mao.iteye.com/blog/541541
jqGrid编辑单元格的事件 备忘1 http://blog.chinaunix.net/uid-7276097-id-3298044.html
jQuery学习笔记--JqGrid相关操作 方法列表 备忘 重点讲解(超重要) http://blog.csdn.net/jpr1990/article/details/6891115
支持多种类型的数据集合作为数据源[jqGrid的若干种用法] http://www.cnblogs.com/HopeGi/archive/2012/10/16/jqGrid.html,讲述许多特殊功能,比如滚动条进行翻页等.....
jqgrid使用:常用属性用法和含义【转贴】 http://rautinee.iteye.com/blog/875988, 对于滚动翻页的设置不一样。。。待确认哪种是有效的。
//设置了这个才会根据滚动分页读取数据
scroll: 1, 或者 scroll:true, 好像也没问题
jqgrid合并单元格 http://bbs.blueidea.com/thread-3067461-1-1.html


关于获得所有rowId: http://blog.sina.com.cn/s/blog_025270e901015yad.html
其实跟getDataIDs()这个方法一模一样,这个方法就是获得所有rowId的。



获得某一个属性的访问格式:
var colModel = grid.jqGrid("getGridParam",'colModel');
var colNames= grid.jqGrid("getGridParam",'colNames');

相反,设定使用setGridParam
Grid属性:http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options
列属性:http://www.trirand.com/jqgridwiki/doku.php?id=wiki:colmodel_options
事件:http://www.trirand.com/jqgridwiki/doku.php?id=wiki:events
方法:http://www.trirand.com/jqgridwiki/doku.php?id=wiki:methods


获得被选择的行:
getSelectedGridData : function(grid){
			var selarrrowIDs =JQGridUtils.getGridParam(grid,"selarrrow");
			var array=[];
            if (selr.length) {
                for (var i = 0; i < selarrrowIDs.lenght; i++) {
                    var myrow = jQuery('#grid').jqGrid('getRowData', selarrrowIDs[i]);
					array[array.length]=myrow.NIF;
                }
            }
			return array;
		}

下面可以获取选择一行的id,如果你选择多行,那下面的id是最后选择的行的id:
var id=$(‘#gridTable’).jqGrid(‘getGridParam’,'selrow’);


如果想要获取选择多行的id,那这些id便封装成一个id数组,那可以使用以下:
var ids=$(‘#gridTable’).jqGrid(‘getGridParam’,'selarrrow’);


如果想获取选择的行的数据,只要传入rowId即可,如下:
var rowData = $(“#gridTable”).jqGrid(‘getRowData’,rowId);


而这个rowData是一个对象,如果要获取选择的行的这个对象的属性值,如name的值,需如下:
var rowName=rowData.name;

当然你这个对象得有name这个属性才行

jqGrid获得所有行数据的方法
function testJqfrid(){
    var obj = $("#tablename").jqGrid("getRowData");
    alert(obj.length);
    jQuery(obj).each(function(){
        alert(this.RECEIPT_ORDER_NO);
    });

    var ret = $("#tablename").jqGrid("getRowData", 0);   //获得第一行的数据
}




1.到这里下载:http://www.trirand.com/blog/
2.导入:没有在下载里面找到,那么去网上找。
<!-- Grid Start -->
	<link rel="stylesheet" type="text/css" href="<%=basePath%>/common/js/jquery.jqGrid/css/jquery-ui-1.8.1.custom.css">
	<link rel="stylesheet" type="text/css" href="<%=basePath%>/common/js/jquery.jqGrid/css/ui.jqgrid.css">
	
	<script src="<%=basePath%>/common/js/jquery.jqGrid/jquery-ui-1.8.1.custom.min.js" type="text/javascript"></script>
	<script src="<%=basePath%>/common/js/jquery.jqGrid/jquery.layout-latest.js" type="text/javascript"></script>
	<script src="<%=basePath%>/common/js/jquery.jqGrid/js/i18n/grid.locale-en.js" type="text/javascript"></script>
	<script type="text/javascript">
		$.jgrid.no_legacy_api = true;
		$.jgrid.useJSON = true;
	</script>
	<script src="<%=basePath%>/common/js/jquery.jqGrid/js/jquery.jqGrid.src.js" type="text/javascript"></script>
	<!-- datepicker of grid and page -->
	<link rel="stylesheet" type="text/css" media="screen" href="<%=basePath%>/css/jquery.ui.datepicker.css" />
	<script src="<%=basePath%>/common/js/jquery.ui.datepicker.js" type="text/javascript"></script>
	<!-- Grid Start -->


3.使用
var lastsel2;
var mydata2 = [
		{id:"12345",name:"Desktop Computer",note:"note",stock:"Yes",ship:"FedEx",sdate:"2007-12-03"},
		{id:"12346",name:"Desktop Computer",note:"note",stock:"Yes",ship:"FedEx",sdate:"2007-12-03"}
		];


jQuery("#rowed5").jqGrid({
		datatype: "local",
		height: 250,
	   	colNames:['ID','Name', 'Stock', 'Ship via','Notes','Date'],
	   	colModel:[
	   		{name:'id',index:'id', width:100, sorttype:"int", editable: true},
	   		{name:'name',index:'name', width:100,editable: true,editoptions:{size:"20",maxlength:"30"}},
	   		{name:'stock',index:'stock', width:60, editable: true,edittype:"checkbox",editoptions: {value:"Yes:No"}},
	   		{name:'ship',index:'ship', width:150, editable: true,edittype:"select",editoptions:{value:"FE:FedEx;IN:InTime;TN:TNT;AR:ARAMEX"}},		
	   		{name:'note',index:'note', width:200, sortable:false,editable: true,edittype:"textarea", editoptions:{rows:"2",cols:"10"}},
			{name:'sdate',index:'sdate',width:100, editable:true, sorttype:"date"},		
	   	],
		onSelectRow: function(id){
			if(id && id!==lastsel2){
				jQuery('#rowed5').jqGrid('restoreRow',lastsel2);
				jQuery('#rowed5').jqGrid('editRow',id,true);
				lastsel2=id;
				$( "#"+id+"_sdate" ).datepicker();
			}
		},
		editurl: "server.php",
		caption: "Data of Cost Centre"
	});

for (var i = 0; i < mydata2.length; i++) {
		jQuery("#rowed5").jqGrid('addRowData', mydata2[i].id, mydata2[i]);
	}


4.临时问题:
A:不知道怎么显示不了Datepicker,官方的例子,我没运行成功,不知道是ui.datepikcer.js的版本都对还是咋滴。
所以只好在
onSelectRow: function(id){  
            if(id && id!==lastsel2){  
                $( "#"+id+"_sdate" ).datepicker(); //解决弹出DatePicker问题。 
            }  
        }

B:调用它提供的方法使用类似:
jQuery('#rowed5').jqGrid('restoreRow',lastsel2);

自行调用:
假如不想直接save到服务器,而是保存到本地array,然后自行调用服务器
http://stackoverflow.com/questions/4485970/jqgrid-rowobject-inconsistencies/4486142#4486142
1.初始化Grid:
jQuery("#rowed5").jqGrid({
		datatype: "local",
                //这里随便给一个能调用的地址就好。不设定的话,总是出错。
		editurl: "ServerAction.action?p=pandy",
		cellsubmit : "clientArray",
                ......
}

2.得到数据:
var gridData = $("#rowed5").jqGrid('getGridParam', 'data');


重载   JQuery的jqGrid的重载
重新设置jqGrid的url,并调用重载方法,可实现jqGrid的重载刷新;
示例:
var url = "getList.jsp?name=ling"; 
jQuery("#tableId").jqGrid('setGridParam',{url:url}).trigger("reloadGrid");
其中,tableId是所在列表table的id;
重新初始化,假如改变了colnum的结构, 然后重新初始化. 只能先卸载Grid再进行重绘,才能达到改变列的目的
jQuery("#list47").GridUnload();
reloadGrid();//重新初始化并载入数据


编辑:
var lastsel;
.....
jQuery("#tb_grid").jqGrid({
        ......
        colModel:[
            {name:'wellcome_title',index:'wellcome_title', width:80, editable:true},
            ......
        ],
        onSelectRow: function(id){
            if(id && id!==lastsel){
                jQuery('#tb_grid').jqGrid('restoreRow',lastsel);
                jQuery('#tb_grid').jqGrid('editRow',id,true);
                lastsel=id;
            }
        },
        editurl: "server.php",
        ......
    });

修改,保存,重置三个方法
jQuery('#rowed2').editRow('"+cl+"');
jQuery('#rowed2').saveRow('"+cl+"');
jQuery('#rowed2').restoreRow('"+cl+"');

注意:传入editUrl里面的数据,只包括可编辑的数据,除id外,id并不是根据column name来定义的,直接是是id这个字符串。提交方式是post

jqGrid编辑框动态加载Combo下拉菜单选项
参考:http://lvjava.com/?p=710
http://stackoverflow.com/questions/16104664/jqgrid-dataurl-in-searchoptions-not-working-with-jqgrid4-4-5
{ name: 'destinations', ditable: true, edittype:'select',
  editoptions: { dataUrl:'<%= Url.Action("GetDestinationList","Home") %>',
                 buildSelect: function(data) {
                     var response = jQuery.parseJSON(data.responseText);
                     var s = '<select>';
                     if (response && response.length) {
                         for (var i = 0, l=response.length; i<l ; i++) {
                             var ri = response[i];
                             s += '<option value="'+ri+'">'+ri+'</option>';
                         }
                     }
                     return s + "</select>";
                 }
                }
}


修改导航信息,添加保存成功回调函数
inlineNav:这个方式,在传到后台的时候,自动得到主键id字段,要自己根据需要来获取。
var myEditOptions = {
        keys: true,
        oneditfunc: function (rowid) {
            alert("row with rowid=" + rowid + " is editing.");
        },
        aftersavefunc: function (rowid, response, options) {
            alert("row with rowid=" + rowid + " is successfuly modified.");
        }
    };

    jQuery("#tb_grid").jqGrid('navGrid', "#div_pg", {edit: false, add: false, del: false, save: false});
    jQuery("#tb_grid").jqGrid('inlineNav', "#div_pg",{
        addtext: "Add",
        edittext: "Edit",
        savetext: "Save",
        canceltext: "Cancel",
        addParams: {
            position: "afterSelected",
            addRowParams: myEditOptions
        },
        addedrow: "last",
        editParams: myEditOptions
    });


subGrid: JQGrid的Subgrid http://my.oschina.net/firnice/blog/77312
1,subgrid 4.0之后才支持json
2,  subgrid是根据jqgrid对象再次绑定一个列表。
jsonReader:{  
       root:"jqgridJson", // 从服务端返回的实际数据,名字随意起,但是在Action类中必须有与之匹配的属性,可以是rows
       repeatitems : false,
       subgrid: {
      root:"subgridchid", //子级的内容 Action类中必须有与之匹配的属性,可以是rows
      repeatitems: false  //false之后 subGridModel的mapping才起作用
   }	        
},

        subGrid : true,
        subGridUrl: '<%=path%>/jqgridTest/subgridchid.action',
   subGridModel: [{ name:['标号','内容','备注'],
                   width : [55,80,80],
                   mapping  : ['no','item','qty']} 
   ]

后台需要定义一个id变量 用来接受点击加号传过来的id,此id就是主表的key。
private String id;
其余的思路与主表一样,对应的action写方法 给root的subgridchid赋值
注意:在自己的使用的时候,只有两个repeatitems=false才不会报错


导航:http://www.trirand.com/jqgridwiki/doku.php?id=wiki:navigator&s[]=navgrid,使用参数参考官方文档。
1.设定grid的自己的导航
jQuery("#" + gId).jqGrid('navGrid', "#" + pId, {edit: true, add: true, del: true, save: true});
, 国际化界面要在cn.js文件修改。
2. 自定义导航:跟下面自动以导航相似
jQuery("#" + gId).jqGrid('inlineNav', "#" + pId, {
                addtext: "增加",
                edittext: "修改",
                savetext: "保存",
                deltext: "删除",
                canceltext: "取消",
                /*addParams: {
                 position: "afterSelected",
                 addRowParams: myEditOptions
                 },*/
                addedrow: "last",
                editParams: myEditOptions
            });



自定义导航按钮:http://www.trirand.com/jqgridwiki/doku.php?id=wiki:custom_buttons&s[]=navgrid
jQuery("#grid_id")
.navGrid('#pager',{edit:false,add:false,del:false,search:false})
.navButtonAdd('#pager',{
   caption:"Add", 
   buttonicon:"ui-icon-add", 
   onClickButton: function(){ 
     alert("Adding Row");
   }, 
   position:"last"
})
.navButtonAdd('#pager',{
   caption:"Del", 
   buttonicon:"ui-icon-del", 
   onClickButton: function(){ 
      alert("Deleting Row");
   }, 
   position:"last"
});


editUrl的返回值,回调函数 http://rautinee.iteye.com/blog/660000
var editOptions={
                afterSubmit: function(response,postdata){
                    alert("SAVE:"+response.responseText);//显示返回值
                    //这里是否需要返回,得看源码或者帮助文档
                }
            }
            var delOptions={
                afterSubmit: function(response,postdata){
                    var r= $.parseJSON(response.responseText);//动态页返回json格式的字符串,如{success:true/false}之类的,为false添加err属性什么的,成功则返回new_id
                    //这里要返回一个数组,
                    // 1.true/false,表示是否成功。
                    // 2.message字符串
                    // 3. delete_id
                    return [r.success,r.message,r.new_id];
                }
            }
            jQuery("#" + gId).jqGrid('navGrid', "#" + pId, {edit: true, add: true, del: true, save: true},editOptions,{},delOptions,{},{}); 

参数格式:jQuery("#grid_id").jqGrid('navGrid','#gridpager',{parameters},prmEdit, prmAdd, prmDel, prmSearch, prmView);
改变参数并重新加载
jQuery("#" + gridId).jqGrid('setGridParam',{postData:{.......}});
jQuery("#" + gridId).trigger("reloadGrid");


设定列宽度
http://stackoverflow.com/questions/12171640/jqgrid-changing-the-width-of-a-column-dynamically
$("#mygrid").jqGrid('setColProp','amount',{width:new_width});
var gw = $("#mygrid").jqGrid('getGridParam','width');
$("#mygrid").jqGrid('setGridWidth',gw);


等比放缩: shrinkToFit:默认值为true。
如果shrinkToFit为true且设置了width值,则每列宽度会根据width成比例缩放;
如果shrinkToFit为false且设置了width值,则每列的宽度不会成比例缩放,而是保持原有设置,而Grid将会有水平滚动条。

设定某一rowid被选中:$("#temptableid").setSelection(1);













jqgrid的一些参数说明http://lbxhappy.iteye.com/blog/1533400
1、colNames:列名称,用于描述在界面上显示的列名称
   colNames: ['编号','科室名称','联系人','联系电话','主管科室','状态','备注','opertype'],
2、colModel:列名称对应的model,该model内的各个列要和colNames的各个列进行一一对应
   可以对各个列设置属性,name属性药设置为json数据的key名称,也就是我们的Bean的对应属性名称,width:宽度,editable代表是否可编辑,edittype代表编辑框的类型,可以是  text、select、texare、checkbox等类型,formatter:格式化显示的数据,unformat:处于编辑状态后反格式化到以前的数据
   如:
    colModel: [
    {name:'dpt_code',index:'dpt_code',width:110,editable: true,edittype:"text",cellEdit:false,editrules:{required:true}},
    {name:'dpt_name',index:'dpt_name',width:110,editable: true,edittype:"text"},
    {name:'dpt_manager',index:'dpt_manager',width:100,editable: true,edittype:"text"},
    {name:'dpt_tel',index:'dpt_tel',width:120,editable: true,edittype:"text", editrules:{custom:true, custom_func:telcheck}},
    {name:'dpt_mandpt',index:'dpt_mandpt',editable: true,edittype:"text"},
    {name:'dpt_status',index:'dpt_status',formatter:formatStatus,width:60,editable: true,edittype:"select",unformat:unformatStatus,                                   editoptions :{value:'STP:停用'+';'+'USE:使用'}},
    {name:'dpt_remark',index:'dpt_remark',editable: true,edittype:"text"},
     {name:'opertype',index:'opertype',editable: false,edittype:"text",hidden:true},
                    ],
3、id:代表整个数据表格的一个ID,没条数据的ID必须是唯一的,常和后台数据表ID对应,
   id:dpt_code
4、caption:设置数据表格的标题名称
   caption: "科室管理11",
5、rowNum:设置表格默认显示记录的条数,用于分页
   rowNum:20
6、rowList:供用户选择每页显示的记录数
   rowList:[10,20,30,40],
7、pager: 用指定表格的工具栏
   pager: '#pageDiv',pageDiv是页面某个DIV的ID
8、pgbuttons:true, 是否显示页面分页按钮
9、 multiselect:'true',是指是否可以进行多选
10、altRows:'true',是否开启,提示功能
11、 multiboxonly:true 是否在多选的时候,显示复选框
12、height: 398,代表表格的高度
13、cellEdit:true,是否开启单元格的编辑功能
14、cellsubmit:'remote',remote代表每次编辑提交后进行服务器保存,clientArray只保存到数据表格不保存到服务器
15、cellurl:'departmentAction!updateCell.action',cellsubmit要提交的后台路径
16、scrollrows:true是否可以出现滚动条
17、shrinkToFit:false是否固定每列的宽度
18、editurl:表格的添加、修改、删除按钮所提交的路径
   editurl:'departmentAction!updateDepartment2.action',
19、sortname:默认排序的列
   sortname: 'dpt_sort',
20、jsonReader:解析json数据的参数
    jsonReader: {
                        repeatitems : false,
                        id: "dpt_code" //对应后台数据的ID
                    },
21、prmNames :向后台交互时,所设置的参数名称对应的值
   prmNames : {
                        page:"department.curr_page",    // 表示请求页码的参数名称
                        rows:"department.page_size",    // 表示请求行数的参数名称
                        sort: "department.sort_field", // 表示用于排序的列名的参数名称
                        order: "department.sord", // 表示采用的排序方式的参数名称
                        search:"search", // 表示是否是搜索请求的参数名称
                        totalrows:"department.totalrows" // 表示需从Server得到总共多少行数据的参数名称,参见jqGrid选项中的rowTotal
                    }
22、gridComplete:设置表格数据加载完毕后,所执行的操作
     gridComplete:function(){
                        if($("#gridTable").getDataIDs().length>0){
                            $("#gridTable").jqGrid('setSelection',$("#gridTable").getDataIDs()[0]);//默认选中第一行
                        }
                    },
23、onSelectRow:表格某行被选中后执行的操作:
    onSelectRow:function(){
                        loadDataGrid();
                    },
24、ondblClickRow:数据某行所执行的操作
25、beforeSelectRow:某行记录在被选中前执行操作
26、afterSelectRow:某行记录再被选中后所执行操作
27、设置表格的添加、删除、修改、查询按钮是否显示,也可以自定义按钮
      search:false不显示查询按钮,add_options主要设置点添加按钮后弹出框的样式及模式
      navButtonAdd:通过该方法可以添加自定义的按钮
      var add_options={
                    width:400,
                    height:290,
                    left:20,
                    top:30,
                    reloadAfterSubmit:false,
                    jqModal:false,
                    addCaption: "添加部门信息",
                    bSubmit: "保存",
                    bCancel: "关闭",
                    closeAfterAdd:true

                };
     jQuery("#gridTable").jqGrid('navGrid','#pageDiv',{search:false,edit:true,add:true,del:true},edit_options,add_options,{},{},{}).navButtonAdd('#pageDiv',{
                    caption:"添加",edit:true显示编辑按钮
                    title:'添加药品信息',
                    buttonicon:"ui-icon-update",
                    onClickButton:function(){
                        tb_show('添加科室信息','/simpleProj/bsic/departmentAction!addDepartment.action?TB_iframe=true&height=420&width=630&keepThis=false"',true);
                    },
                    position:"last"
                });
28、获取表格总行数
     var ids = $("#gridTable").getDataIDs();获得所有数据的ID数组
29、按ID获取某行数据操作:
    $("#gridTable").jqGrid("getRowData",id);
30、获取选中行的记录,如果设置的multiselect为true那么获取的是数组反正是一个对象
    var re = $("#gridTable").jqGrid('getGridParam','selrow'),返回一个json对象,可以通过如下方式访问:
    re.dpt_name,re.dpt_tel
31、在数据网格动态增加行操作
    rowid代表行号、dataRow一条josn数据,last指向表格最后一行追加
    $("#gridTable").jqGrid("addRowData", rowid, dataRow, "last");

32 设定行和列的颜色,表格行颜色和单元格颜色
    ,rowattr: function (rd) { //grid配置
                if (rd.realSum == 0) {
                    return {"style": "color:red;"};
                }
                return null;
            }
    ,cellattr: function (rowId, val, rawObject, cm, rdata) {//module配置
                            return 'style="color:red; font-weight: bold;"';
                        }




15. jqGrid的搜索框下拉 http://www.cnblogs.com/linguoguo/p/4076279.html
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics