当前位置: 首页 > news >正文

javascript笔记:自己写一个jqgrid框架(二)

接着写我自己的Grid,做这件事情十分有成就感,只要有时间,我会继续努力下去的。

今天的版本里,我主要做了两件事情:

第一件:完全套用了jqGrid的css样式;当然不是简单的拿来就用,其实jqGrid的css样式使用的是jqueryUI,下面是jqueryUI的地址:

http://jqueryui.com/themeroller/

如下图:

点击“Gallery”标签,如图所示:

大家看到了,jqueryUI有不少皮肤可以用。

既然jqueryUI有很多皮肤可以用,我们现在又使用jqGrid默认的css样式,那么就可以让我们自己的Grid达到换肤的效果。

第二件:我为自己的Grid加入了一个分组数据的功能

首先还是给出项目的目录结构:

大家看到theme文件夹下有三个文件夹:

1.le-frog(jqueryUI绿色的样式)
2.smoothness(jqueryUI灰白色的样式,这是我喜欢的样式,也是我以后开发的默认样式)
3.redmond(这是jqGrid的默认样式)

文章结尾我会给出源代码下载链接,所以这里我只给出关键的代码:

xjqGrid-1.0.js:

(function(window,undefined){
    var document = window.document,
        navigator = window.navigator,
        location = window.location,
        $ = window.jQuery;     
    
    Array.prototype.delRepeatItem = function(){//删除数组里的重复项
        var retArr=[],tempObj = {};
        for (var i = 0,tmpItem;(tmpItem = this[i]) != null;i++){
            if (!tempObj[tmpItem]){
                retArr.push(tmpItem);
                tempObj[tmpItem] = true;
            }
        }
        return retArr;
    }
    
    var xjqGridUtils = {// 工具类
        isString:function(obj){// 判断是不是String类型
            return (obj != null) && (obj != undefined) && (typeof obj == 'string') && (obj.constructor == String);    
        },
        isNumber:function(obj){// 判断是否是数组
            return (typeof obj == 'number') && (obj.constructor == Number);    
        },
        isDate:function(obj){// 判断是否是日期
            return obj && (typeof obj == 'object') && (obj.constructor == Date);
        },
        isArray:function(obj){//判断是否是数组
            return obj && (typeof obj == 'object') && (obj.constructor == Array);    
        },
        isObject:function(obj){//判断是否是对象
            return obj && (typeof obj == 'object') && (obj.constructor == Object)    
        },
        trim:function(str){// 去除左右两边空格
            return str.replace(/(^\s*)|(\s*$)/, "");;
        },
        groupForGridData:function(gridData,fieldName){// 对数据进行分组
            var groupField = [],groupGridData = [];
            $.each(gridData,function(ind,data){
                groupField.push(data[fieldName]);
            });    
            groupField = groupField.delRepeatItem();
            $.each(groupField,function(ind,data){
                var tmpObj = {},tmpArr = [];
                $.each(gridData,function(innerInd,innerData){
                    if (innerData[fieldName] == data){
                        tmpArr.push(innerData);
                    }
                });
                tmpObj[data] = tmpArr;
                groupGridData.push(tmpObj);
            });    
            return groupGridData;    
        }
    };
    var xjqGrid = {
        jsName:"xjqGrid.js",
        defaultVer:"20120628",
        executeFlag:true,
        errInfo:undefined,
        recordGridObj:{},
        targetDivId:undefined,
        targetDivObj:undefined,
        gridWidth:'100%',
        gridHeight:"100%",
        colNames:[],
        colModel:[],
        caption:"欢迎使用xjqGrid!",
        gridData:[],
        groupGridData:[],
        selectType:"none",
        groupFlag:true,
        groupView:{
            groupField:undefined
        },
        init:function(dataObj){//初始化
            if (xjqGridUtils.isObject(dataObj)){
                this.recordGridObj = dataObj;
                this.targetDivId = dataObj.targetId;
                this.gridWidth = dataObj.width;
                this.gridHeight = dataObj.height;
                this.colNames = dataObj.colNames;
                this.colModel = dataObj.colModel;
                this.caption = dataObj.caption;
                this.gridData = dataObj.gridData;
                this.selectType = dataObj.selectType;
                this.groupFlag = dataObj.groupFlag;
                this.groupView = dataObj.groupView;
                this.targetDivObj = $("#" + this.targetDivId);
                return this;
            }else{
                this.executeFlag = false;
                this.errInfo = "init的参数必须是javascript对象!";
            }
        },
        execute:function(){//执行方法
            var gridRootObj = this.createGridRoot();
            var gridCaptionObj = this.createGridCaption();
            var gridHeadObj = this.createGridHead();
            var gridBodyObj = this.createGridBody();
            
            gridRootObj.append(gridCaptionObj);
            gridRootObj.append(gridHeadObj);
            gridRootObj.append(gridBodyObj);
            this.targetDivObj.append(gridRootObj);
            
            this.targetDivObj.addClass("ui-jqgrid");
            this.targetDivObj.addClass("ui-widget");
            this.targetDivObj.addClass("ui-widget-content");
            this.targetDivObj.addClass("ui-corner-all");
            this.targetDivObj.css("width",this.gridWidth);
            this.targetDivObj.attr("id","xjqbox_" + this.targetDivId);
            
            this.eventHanlding();
        },
        createGridRoot:function(){
            var gridRootObj = $("<div></div>");
            gridRootObj.addClass("ui-jqgrid-view");
            gridRootObj.attr("id","xjqview_" + this.targetDivId);
            gridRootObj.css("width",this.gridWidth);
        
            return gridRootObj;
        },
        createGridCaption:function(){
            var gridCaptionDiv = $("<div></div>");
            gridCaptionDiv.addClass("ui-jqgrid-titlebar");
            gridCaptionDiv.addClass("ui-widget-header");
            gridCaptionDiv.addClass("ui-corner-top");
            gridCaptionDiv.addClass("ui-helper-clearfix");
            
            var gridCaptionA = $("<a></a>");
            gridCaptionA.addClass("ui-jqgrid-titlebar-close");
            gridCaptionA.addClass("HeaderButton");
            gridCaptionA.css("right","0px");
            
            var gridCaptionASpan = $("<span></span>");
            gridCaptionASpan.addClass("ui-icon");
            gridCaptionASpan.addClass("ui-icon-circle-triangle-n");
            
            gridCaptionA.append(gridCaptionASpan);
            
            var gridCaptionSpan = $("<span></span>");
            gridCaptionSpan.text(this.caption);
            gridCaptionSpan.addClass("ui-jqgrid-title");
            
            gridCaptionDiv.append(gridCaptionA);
            gridCaptionDiv.append(gridCaptionSpan);
            
            return gridCaptionDiv;
            
        },
        createGridHead:function(){
            var gridHeadDiv = $("<div></div>");
            gridHeadDiv.addClass("ui-state-default");
            gridHeadDiv.addClass("ui-jqgrid-hdiv");
            gridHeadDiv.css("width",this.gridWidth);
            
            var gridChildHeadDiv = $("<div></div>");
            gridChildHeadDiv.addClass("ui-jqgrid-hbox");
            
            var gridHeadTbl = $("<table></table>");
            gridHeadTbl.attr("cellspacing","0");
            gridHeadTbl.attr("cellpadding","0");
            gridHeadTbl.attr("border","0");
            gridHeadTbl.css("width","682px");
            
            var gridHeadTr = $("<tr></tr>");
            gridHeadTr.addClass("ui-jqgrid-labels");
            
            if (this.selectType){
                if (this.selectType == 'checkbox'){
                    var gridHeadThforSel = $("<th></th>");
                    gridHeadThforSel.addClass("ui-th-ltr");    
                    gridHeadThforSel.addClass("ui-th-column");
                    gridHeadThforSel.addClass("ui-state-default");
                    
                    gridHeadThforSel.attr("name",xjqGrid.targetDivId + "_cb");
                    gridHeadThforSel.attr("id",xjqGrid.targetDivId + "_cb");
                    gridHeadThforSel.css("width","20px");
                    gridHeadThforSel.css("border-bottom","0 none");
                    gridHeadThforSel.css("border-top","0 none");
                    gridHeadThforSel.css("border-left","0 none");
                    
                    var gridHeadThforSelDiv = $("<div></div>");
                    gridHeadThforSelDiv.attr("id","xjqgh_" + xjqGrid.targetDivId + "_cb");
                    
                    var gridHeadThforSelChk = $("<input type='checkbox'/>");
                    gridHeadThforSelChk.attr("cb_" + xjqGrid.targetDivId);
                    gridHeadThforSelChk.addClass("cbox");
                    
                    gridHeadThforSelDiv.append(gridHeadThforSelChk);
                    gridHeadThforSel.append(gridHeadThforSelDiv);
                    gridHeadTr.append(gridHeadThforSel);
                }
            }
            
            $.each(xjqGrid.colModel,function(ind,data){
                var gridHeadTh = $("<th></th>");    
                gridHeadTh.addClass("ui-th-ltr");
                gridHeadTh.addClass("ui-th-column");
                gridHeadTh.addClass("ui-state-default");
                
                gridHeadTh.css("border-bottom","0 none");
                gridHeadTh.css("border-top","0 none");
                gridHeadTh.css("border-left","0 none");
                
                if (data.name){
                    gridHeadTh.attr('name',xjqGrid.targetDivId + "_" + data.name);
                }
                if (data.id){
                    gridHeadTh.attr('id',xjqGrid.targetDivId + "_" + data.id);    
                }
                if (data.width){
                    gridHeadTh.css('width',data.width);    
                }
                gridHeadTh.text(xjqGrid.colNames[ind]);
                gridHeadTr.append(gridHeadTh);
            });
            
            gridHeadTbl.append(gridHeadTr);
            gridChildHeadDiv.append(gridHeadTbl);
            gridHeadDiv.append(gridChildHeadDiv);
            
            return gridHeadDiv;
        },
        createGridBody:function(){
            var gridBodyDiv = $("<div></div>");
            gridBodyDiv.addClass("ui-jqgrid-bdiv");
            gridBodyDiv.css("width",this.gridWidth);
            gridBodyDiv.css("height",this.gridHeight);
            
            var gridBodyChildDiv = $("<div></div>");
            gridBodyChildDiv.attr("position","relative");
            gridBodyChildDiv.append("<div></div>");
            
            var gridBodyTbl = $("<table></table>");
            gridBodyTbl.attr("cellspacing","0");
            gridBodyTbl.attr("cellpadding","0");
            gridBodyTbl.attr("border","0");
            gridBodyTbl.css("width","682px");
            gridBodyTbl.addClass("ui-jqgrid-btable");
            
            var gridBodyCellTr = $("<tr></tr>");
            gridBodyCellTr.css("height","auto");
            gridBodyCellTr.addClass("jqgfirstrow");
            
            if (this.selectType){
                if (this.selectType == 'checkbox'){
                    var gridBodyCellFirstTd = $("<td></td>");
                    gridBodyCellFirstTd.css("height","0px");
                    gridBodyCellFirstTd.css("width","20px");
                    gridBodyCellTr.append(gridBodyCellFirstTd);
                }
            }
            
            $.each(this.colModel,function(ind,data){
                var gridBodyCellTd = $("<td></td>");
                gridBodyCellTd.css("height","0px");
                if (data.width){
                    gridBodyCellTd.css("width",data.width);    
                }
                gridBodyCellTr.append(gridBodyCellTd);
            });
            gridBodyTbl.append(gridBodyCellTr);
            
            if (this.groupFlag){
                var colspanLen = 0;
                
                this.groupGridData = xjqGridUtils.groupForGridData(this.gridData,this.groupView.groupField);
                if (this.selectType == "none"){
                    colspanLen = this.colModel.length;
                }else{
                    colspanLen = this.colModel.length + 1;
                }
                $.each(this.groupGridData,function(firstInd,firstData){
                    for (var groupKey in firstData){
                        var groupGridBodyTr = $("<tr></tr>");
                        groupGridBodyTr.addClass("ui-widget-content");
                        groupGridBodyTr.attr("gridTrType","group");
                        groupGridBodyTr.attr("groupHead","group_grid_" + firstInd + "_" + xjqGrid.targetDivId);
                        var groupGridBodyTd = $("<td></td>");
                        groupGridBodyTd.attr("colspan",colspanLen);
                        groupGridBodyTd.css("padding-left","0px");
                        groupGridBodyTd.text(groupKey);
                        var groupGridBodySpan = $("<span></span>");
                        groupGridBodySpan.addClass("ui-icon tree-wrap-ltr ui-icon-circlesmall-minus");
                        groupGridBodySpan.css("cursor","pointer");
                        groupGridBodyTd.append(groupGridBodySpan);
                        groupGridBodyTr.append(groupGridBodyTd);
                        gridBodyTbl.append(groupGridBodyTr);
                        $.each(firstData[groupKey],function(secInd,secData){
                            var gridBodyContentTr = $("<tr></tr>");
                            gridBodyContentTr.addClass("ui-widget-content");
                            gridBodyContentTr.css("display","table-row");
                            gridBodyContentTr.attr("groupCell","group_grid_" + firstInd + "_" + xjqGrid.targetDivId + "_For"+ secInd);
                            if (xjqGrid.selectType){
                                if (xjqGrid.selectType == 'checkbox'){
                                    var gridBodyFirstTd = $("<td></td>");
                                    gridBodyFirstTd.css("text-align","center");
                                    
                                    gridBodyFirstChk = $("<input type='checkbox'/>");
                                    gridBodyFirstChk.addClass("cbox");
                                    gridBodyFirstChk.attr("index",secInd);
                                    
                                    gridBodyFirstTd.append(gridBodyFirstChk);
                                    gridBodyContentTr.append(gridBodyFirstTd);
                                }
                            }
                            
                            $.each(xjqGrid.colModel,function(thirdInd,thirdData){
                                var gridBodyContentTd = $("<td></td>");
                                if (thirdData.name){
                                    gridBodyContentTd.text(secData[thirdData.name]);
                                    gridBodyContentTd.attr("title",secData[thirdData.name]);
                                }
                                gridBodyContentTr.append(gridBodyContentTd);                                
                            });
                            gridBodyTbl.append(gridBodyContentTr);
                        });                        
                    }
                });
            }else{
                $.each(this.gridData,function(ind,data){
                    var gridBodyContentTr = $("<tr></tr>");
                    gridBodyContentTr.addClass("ui-widget-content");
                    gridBodyContentTr.addClass("jqgrow");
                    gridBodyContentTr.addClass("ui-row-ltr");
                    gridBodyContentTr.attr("id",ind);
                    
                    if (xjqGrid.selectType){
                        if (xjqGrid.selectType == 'checkbox'){
                            var gridBodyFirstTd = $("<td></td>");
                            gridBodyFirstTd.css("text-align","center");
                            
                            gridBodyFirstChk = $("<input type='checkbox'/>");
                            gridBodyFirstChk.addClass("cbox");
                            gridBodyFirstChk.attr("index",ind);
                            
                            gridBodyFirstTd.append(gridBodyFirstChk);
                            gridBodyContentTr.append(gridBodyFirstTd);
                        }
                    }
                    
                    $.each(xjqGrid.colModel,function(colInd,colData){
                        var gridBodyContentTd = $("<td></td>");
                        if (colData.name){
                            gridBodyContentTd.text(data[colData.name]);
                            gridBodyContentTd.attr("title",data[colData.name]);
                        }
                        gridBodyContentTr.append(gridBodyContentTd);
                    });
                    gridBodyTbl.append(gridBodyContentTr);
                });            
            }    
            gridBodyChildDiv.append(gridBodyTbl);
            gridBodyDiv.append(gridBodyChildDiv);    
            return gridBodyDiv;
        },
        eventHanlding:function(){
            $(".HeaderButton").bind("click",function(){
                if ($(".ui-jqgrid-hdiv").css("display") == "block"){
                    $(".ui-jqgrid-hdiv").css("display","none");
                    $(".ui-jqgrid-bdiv").css("display","none");
                    $("span",this).removeClass("ui-icon-circle-triangle-n").addClass("ui-icon-circle-triangle-s");
                }else{
                    $(".ui-jqgrid-hdiv").css("display","block");
                    $(".ui-jqgrid-bdiv").css("display","block");
                    $("span",this).removeClass("ui-icon-circle-triangle-s").addClass("ui-icon-circle-triangle-n");
                }
            });
            $('.HeaderButton').hover(function(){
                $(this).addClass("ui-state-hover");
            },function(){
                $(this).removeClass("ui-state-hover");
            });
            $(".ui-jqgrid-bdiv table tr").hover(function(){
                $(this).addClass("ui-state-hover");
            },function(){
                $(this).removeClass("ui-state-hover");    
            });
            $(".ui-jqgrid-bdiv table tr input[type='checkbox']").bind("click",function(){
                if ($(this).attr("checked")){
                    $("#" + $(this).attr("index")).addClass("ui-state-highlight");
                }else{
                    $("#" + $(this).attr("index")).removeClass("ui-state-highlight");
                }
            });
            $(".ui-jqgrid-hbox table tr input[type='checkbox']").bind("click",function(){
                if ($(this).attr("checked")){
                    $.each($(".ui-jqgrid-bdiv table tr input[type='checkbox']"),function(){
                        $(this).attr("checked","checked");
                        $("#" + $(this).attr("index")).addClass("ui-state-highlight");
                    });
                }else{
                    $.each($(".ui-jqgrid-bdiv table tr input[type='checkbox']"),function(){
                        $(this).removeAttr("checked");
                        $("#" + $(this).attr("index")).removeClass("ui-state-highlight");
                    });                    
                }
            });
            if (this.groupFlag){
                $(".ui-jqgrid-bdiv table tr[gridTrType='group'] span").bind("click",function(){
                    var spanObj = this;
                    $.each($(".ui-jqgrid-bdiv table tr[groupcell^='" + $(this).parent().parent().attr("groupHead") + "']"),function(ind,data){
                        console.log($(data).css("display"));
                        if ($(data).css("display") == "table-row"){
                            $(data).css("display","none");
                            $(spanObj).removeClass("ui-icon-circlesmall-minus");
                            $(spanObj).addClass("ui-icon-circlesmall-plus");
                        }else{
                            $(data).css("display","table-row");
                            $(spanObj).removeClass("ui-icon-circlesmall-plus");
                            $(spanObj).addClass("ui-icon-circlesmall-minus");                                                        
                        }
                    })
                });
            }
        },
        errorHanldling:function(){// 错误处理
            if (xjqGridUtils.isString(errObj)){
                alert("错误信息:" + errObj);
            }
        }
    };
    window.xjqGrid = xjqGrid;
})(window);

GroupXjqGrid1.0.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Group XjqGrid Demo 1.0</title>
</head>
<!--<link rel="stylesheet" type="text/css" media="screen" href="themes/redmond/jquery-ui-1.8.2.custom.css" />-->
<link rel="stylesheet" type="text/css" media="screen" href="themes/smoothness/jquery-ui-1.8.21.custom.css" />
<!--<link rel="stylesheet" type="text/css" media="screen" href="themes/le-frog/jquery-ui-1.8.21.custom.css" />-->
<link rel="stylesheet" type="text/css" media="screen" href="themes/ui.jqgrid.css" />
<link rel="stylesheet" type="text/css" media="screen" href="themes/ui.multiselect.css" />
<script type="text/javascript" src="js/jquery-1.7.1.js"></script>
<script type="text/javascript" src="js/xjqGrid-1.0.js"></script>
<body>
<div id="testXjqGrid"></div>
</body>
</html>
<script type="text/javascript">
$(document).ready(function(){
    xjqGrid.init({
        targetId:"testXjqGrid",
        width:"700px",
        height:"auto",
        caption:"Grouping Array Data [Group xjqGrid]",
        selectType:"none",
        colNames:['Inv No','Date', 'Client', 'Amount','Tax','Total','Notes'],
        colModel:[
                {name:'id',index:'id', width:60, sorttype:"int"},
                {name:'invdate',index:'invdate', width:90, sorttype:"date", formatter:"date"},
                {name:'name',index:'name', width:100, editable:true},
                {name:'amount',index:'amount', width:80, align:"right",sorttype:"float", formatter:"number", editable:true},
                {name:'tax',index:'tax', width:80, align:"right",sorttype:"float", editable:true},        
                {name:'total',index:'total', width:80,align:"right",sorttype:"float"},        
                {name:'note',index:'note', width:150, sortable:false}        
            ],
        gridData:[
                {id:"1",invdate:"2010-05-24",name:"test",note:"note",tax:"10.00",total:"2111.00"} ,
                {id:"2",invdate:"2010-05-25",name:"test2",note:"note2",tax:"20.00",total:"320.00"},
                {id:"3",invdate:"2007-09-01",name:"test3",note:"note3",tax:"30.00",total:"430.00"},
                {id:"4",invdate:"2007-10-04",name:"test",note:"note",tax:"10.00",total:"210.00"},
                {id:"5",invdate:"2007-10-05",name:"test2",note:"note2",tax:"20.00",total:"320.00"},
                {id:"6",invdate:"2007-09-06",name:"test3",note:"note3",tax:"30.00",total:"430.00"},
                {id:"7",invdate:"2007-10-04",name:"test",note:"note",tax:"10.00",total:"210.00"},
                {id:"8",invdate:"2007-10-03",name:"test2",note:"note2",amount:"300.00",tax:"21.00",total:"320.00"},
                {id:"9",invdate:"2007-09-01",name:"test3",note:"note3",amount:"400.00",tax:"30.00",total:"430.00"},
                {id:"11",invdate:"2007-10-01",name:"test",note:"note",amount:"200.00",tax:"10.00",total:"210.00"},
                {id:"12",invdate:"2007-10-02",name:"test2",note:"note2",amount:"300.00",tax:"20.00",total:"320.00"},
                {id:"13",invdate:"2007-09-01",name:"test3",note:"note3",amount:"400.00",tax:"30.00",total:"430.00"},
                {id:"14",invdate:"2007-10-04",name:"test",note:"note",amount:"200.00",tax:"10.00",total:"210.00"},
                {id:"15",invdate:"2007-10-05",name:"test2",note:"note2",amount:"300.00",tax:"20.00",total:"320.00"},
                {id:"16",invdate:"2007-09-06",name:"test3",note:"note3",amount:"400.00",tax:"30.00",total:"430.00"},
                {id:"17",invdate:"2007-10-04",name:"test",note:"note",amount:"200.00",tax:"10.00",total:"210.00"},
                {id:"18",invdate:"2007-10-03",name:"test2",note:"note2",amount:"300.00",tax:"20.00",total:"320.00"},
                {id:"19",invdate:"2007-09-01",name:"test3",note:"note3",amount:"400.00",tax:"30.00",total:"430.00"},
                {id:"21",invdate:"2007-10-01",name:"test",note:"note",amount:"200.00",tax:"10.00",total:"210.00"},
                {id:"22",invdate:"2007-10-02",name:"test2",note:"note2",amount:"300.00",tax:"20.00",total:"320.00"},
                {id:"23",invdate:"2007-09-01",name:"test3",note:"note3",amount:"400.00",tax:"30.00",total:"430.00"},
                {id:"24",invdate:"2007-10-04",name:"test",note:"note",amount:"200.00",tax:"10.00",total:"210.00"},
                {id:"25",invdate:"2007-10-05",name:"test2",note:"note2",amount:"300.00",tax:"20.00",total:"320.00"},
                {id:"26",invdate:"2007-09-06",name:"test3",note:"note3",amount:"400.00",tax:"30.00",total:"430.00"},
                {id:"27",invdate:"2007-10-04",name:"test",note:"note",amount:"200.00",tax:"10.00",total:"210.00"},
                {id:"28",invdate:"2007-10-03",name:"test2",note:"note2",amount:"300.00",tax:"20.00",total:"320.00"},
                {id:"29",invdate:"2007-09-01",name:"test3",note:"note3",amount:"400.00",tax:"30.00",total:"430.00"}
        ],
        groupFlag:true,
        groupView:{
               groupField:"name"
           }
    }).execute();
});
</script>

换肤的关键代码就是

<!--<link rel="stylesheet" type="text/css" media="screen" href="themes/redmond/jquery-ui-1.8.2.custom.css" />-->
<link rel="stylesheet" type="text/css" media="screen" href="themes/smoothness/jquery-ui-1.8.21.custom.css" />
<!--<link rel="stylesheet" type="text/css" media="screen" href="themes/le-frog/jquery-ui-1.8.21.custom.css" />-->

jqGrid的样式不是太好用,我也添加了些自己的代码,修改的文件是ui.jqgrid.css,添加的代码如下:

/*xiajun add 2012-07-02*/
.ui-jqgrid-bdiv table tr.ui-widget-content td{border-right-color:inherit;border-right-style:solid;border-right-width:1px;text-align:left;border-bottom-color:inherit;border-bottom-style:solid;border-bottom-width:1px;font-weight:normal;height:22px}
.ui-jqgrid-bdiv tr.jqgfirstrow td{padding:0px}

下面就是我的xjqGrid的效果,贴出图来秀秀:

源代码的下载链接:

http://files.cnblogs.com/sharpxiajun/xjqGrid1.1.rar

 

 

相关文章:

  • eclipse编译器显示的文件名乱码,活动标签乱码(已解决)
  • Silverlight/Windows8/WPF/WP7/HTML5周学习导读(6月25日-7月1日)
  • 公式编辑器打的公式能改变颜色吗?
  • 7月1日我成为MVP啦
  • 直播答题APP突然爆红 直播APP平台迎来社交裂变新契机!
  • 模糊查询+分页
  • SQLServer基本操作
  • 正则表达式—贪婪与非贪婪模式
  • 05-maven学习-构建web项目
  • [更新]缓存管理的帮助类(MemoryCache版,需要.net 4以上)
  • CXF2.7.7 java.lang.RuntimeException: Cannot create a secure XMLInputFactory
  • C#对象克隆介绍 (转)
  • 使用tpcc-mysql进行性能测试
  • Struts action的单例与多例
  • windows下实现屏幕分享(C#)
  • JS 中的深拷贝与浅拷贝
  • Babel配置的不完全指南
  • ECMAScript6(0):ES6简明参考手册
  • Golang-长连接-状态推送
  • Java Agent 学习笔记
  • Mysql优化
  • node学习系列之简单文件上传
  • Python socket服务器端、客户端传送信息
  • React组件设计模式(一)
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • webpack4 一点通
  • 反思总结然后整装待发
  • 浮现式设计
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • gunicorn工作原理
  • 大数据全解:定义、价值及挑战
  • 交换综合实验一
  • 移动端高清、多屏适配方案
  • (WSI分类)WSI分类文献小综述 2024
  • (zt)最盛行的警世狂言(爆笑)
  • (层次遍历)104. 二叉树的最大深度
  • (二)linux使用docker容器运行mysql
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (转)EOS中账户、钱包和密钥的关系
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET Core Web APi类库如何内嵌运行?
  • .NET 读取 JSON格式的数据
  • .Net 垃圾回收机制原理(二)
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .net和php怎么连接,php和apache之间如何连接
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • /dev/sda2 is mounted; will not make a filesystem here!
  • [BZOJ] 3262: 陌上花开
  • [c++] 单例模式 + cyberrt TimingWheel 单例分析
  • [codevs 1515]跳 【解题报告】
  • [DM复习]关联规则挖掘(下)
  • [FFmpeg学习]从视频中获取图片