神奇而陌生的jqgrid

简介: 神奇而陌生的jqgrid

最近在研究jqgrid的单元格编辑功能,由衷感到其神奇而强大的地方,同时也默默的忍受着没有完整API而造成的使用困难,深深的为那些没有亲自编写代码却不断的copy文章发布人员的可恶,下面我将通过自己的亲身体会并且附送代码和解释的方式为大家送上一份福利:


1.从官网上下载jquery.jqGrid.min.js,我也将在附件中添加一个完整的jqGrid源码,然后附送官网API的地址http://www.trirand.com/jqgridwiki/doku.php?id=wiki:cell_editing,以及最新demo的地址http://www.trirand.com/blog/jqgrid/jqgrid.html


2.条件满足后,我们来通过jqGrid的cell edit功能实现一个单元格编辑保存并且刷新的功能,先上效果图

image.png



通过单元格中的编辑、提交、退出操作按钮来对会员返利进行编辑,如果已经有值,则不能进行操作,当用户输入合理的数据后,点击提交按钮则会将数据发送到server端,数据更新成功后,页面进行刷新。



3.下面我将一步步的进行说明


首先,我们通过设置table 的一系列属性来控制表格的生成,具体的代码如下

{
        name : 'close_price',
        index : 'close_price',
        formatter : 'number',
        formatoptions : {
          thousandsSeparator : " ,",
          decimalPlaces : 2
        },
        width : 80,
        resizable : false,
        align : 'center'
      // ,
      // editable : true,
      // editoptions : {
      // readonly : true
      // }
      }, {
        name : 'rebate',
        index : 'rebate',
        formatter : "number",
        formatoptions : {
          thousandsSeparator : ",",
          decimalPlaces : 2
        },
        width : 80,
        resizable : false,
        editable : true,
        editrules : {
          required : true,
          number : true,
          minValue : 0.00
        },
        align : 'center'
      }, {
        name : 'rebateDate',
        index : 'rebateDate',
        width : 100,
        resizable : false,
        align : 'center'
      // ,
      // editable : true,
      // editoptions : {
      // readonly : true
      // }
      }, {
        name : 'style',
        index : 'style',
        width : 50,
        resizable : false,
        sorttype : 'text',
        align : 'center'
      }, {
        name : 'stauts',
        index : 'stauts',
        width : 50,
        resizable : true,
        sorttype : 'text',
        align : 'center'
      }, {
        name : 'oper',
        index : 'oper',
        width : 140,
        resizable : false,
        sortable : false,
        align : 'center'
      } ],

以上代码主要是对图片中显示的列进行控制,如果需要对某列进行编辑,则将editable属性设置为true,然后注意editrules属性,其可以对该列进行一些数据限制,这里就先不进行介绍了,你可以到官网看到很细致的说明。

第二步:

// 没有进行返利的会员可以进行返利
          if (rowData.rebate == 0.00) {
            var cl = ids[i];
            var be = "<input style='height:22px;width:40px;' type='button' value='编辑' οnclick=\"jQuery('#memberscommissionListGrid').editRow('" + cl + "');\"  />";
            var se = "<input style='height:22px;width:40px;' type='button' value='提交' οnclick=\"memberscommissionList.rebate('" + cl + "');\"  />";
            var ce = "<input style='height:22px;width:40px;' type='button' value='退出' οnclick=\"jQuery('#memberscommissionListGrid').restoreRow('" + cl + "');\" />";
            jQuery("#memberscommissionListGrid").jqGrid('setRowData', ids[i], {
              oper : be + se + ce
            });
          }


通过操作列中的是三个按钮对单元格的操作进行控制,点击编辑,则用户可以对会员返利金额列进行数据编辑,点击退出则退出编辑模式,点击提交,则通过memberscommissionList.rebate方法对发送数据以及接收到数据后的一系列控制,注意rebate方法中的内容

// 进行数据的提交
  rebate : function(id) {
    // 获取当前行内容
    var rowData = $("#memberscommissionListGrid").jqGrid("getRowData", id);
    // 对save方法进行重载
    $('#memberscommissionListGrid').jqGrid('saveRow', id, {
      // server的请求地址,这里是一个controller的action地址
      url : editUrl,
      mtype : "POST",
      // 出错则退出编辑模式
      restoreAfterError : true,
      // 参数传递,key:value,则server端通过request.getParameter()方法获取
      extraparam : {
        "uid" : rowData.uid,
        "reabte" : rowData.rebate,
        "rebateDate" : rowData.rebateDate,
        "close_price" : rowData.close_price
      },
      // 保存后返回的server端传递信息
      aftersavefunc : function(rowid, res) {
        alert(res.responseText);
        // 刷新表格
        jQuery("#memberscommissionListGrid").trigger("reloadGrid");
        return true;
      }
    });
  },

该段代码通过注释就可以很清楚的看明白,这样前端的工作就完毕了。

接下来,我们在server端对数据进行处理

// 返利金额
          double rebate = Double.parseDouble(request.getParameter("rebate"));
          // 会员id
          int uid = Integer.parseInt(request.getParameter("uid"));
          // 返利时间
          String rebateDate = request.getParameter("rebateDate");
          // 手续费
          double closePrice = Double.parseDouble(request.getParameter("close_price"));
          logger.info("返利金额:" + rebate + " 会员id:" + uid + " 返利时间:" + rebateDate + " 手续费:" + closePrice);
          // 获取当前会员返利信息
          if (this.moneyRecordDAO.selectByParaMoneyRecord(uid, rebateDate) != null) {
            result = "对不起,该月会员已返利过!";
          } else {
            // 返利金额超出了手续费
            if (rebate > closePrice) {
              result = "会员返利金额超出了该月会员产生的手续费!";
            } else {
              // 先对会员返利记录进行增加
              MoneyRecord key = new MoneyRecord();
              key.setUid(uid);
              key.setRebatedate(rebateDate);
              key.setMemberrebate(new BigDecimal(rebate));
              key.setIsclearing(0);
              this.moneyRecordDAO.SaveMoneyRecord(key);
              // 返利记录增加完毕后,对交易所总代理的money_user表进行修改,减去返利金额
              MoneyUser exchange = this.moneyuserDAO.selectByPrimaryKey(this.membersDAO
                  .selectByProxyserial(CommonConstant.EXCHANGE_SERIAL).getUid());
              exchange.setTotalpaymoney(exchange.getTotalpaymoney().subtract(new BigDecimal(rebate)));
              this.moneyuserDAO.updateByPrimaryKey(exchange);
              result = "该月会员返利成功!";
            }
          }
          ServletOutputStream out = response.getOutputStream();
          ObjectMapper objectMapper = new ObjectMapper();
          objectMapper.writeValue(out, result);
          out.flush();

通过request获取客户端传递的参数,进行数据库操作后,然后将对应的返回数据通过reponse相应到客户端,该段代码也非常简单,一目了然,这样整个完整的MVC过程就完了。

内容很简单,但是方式很重要,1.如果通过jggrid对单元格数据进行显示、控制、编辑,2.通过jqgrid对数据进行封装,然后发送,然后如何接收,接收后如何处理,3.server端如何获取参数,如何将处理信息相应到客户端。

相关文章
|
4月前
|
JavaScript Perl PHP
一篇文章讲明白jQuery插件之jqueryeditableplugin
一篇文章讲明白jQuery插件之jqueryeditableplugin
26 0
|
4月前
|
JavaScript 前端开发
杨校老师课堂之Web前端JS类库_JQuery案例[效果图与代码齐全]
杨校老师课堂之Web前端JS类库_JQuery案例[效果图与代码齐全]
32 0
|
5月前
|
前端开发
一文搞懂css常用字体属性与背景属性(2),非科班面试之旅
一文搞懂css常用字体属性与背景属性(2),非科班面试之旅
|
5月前
|
JSON 开发框架 前端开发
3分钟内看完这,bootstraptable表格控件,受益匪浅!
3分钟内看完这,bootstraptable表格控件,受益匪浅!
|
前端开发
前端知识案例-javascipt核心语法
前端知识案例-javascipt核心语法
55 0
前端知识案例-javascipt核心语法
|
Web App开发 编解码 前端开发
我明白了,玩转前端面试CSS篇
前端面试 无非就是 CSS + JS + 框架 + 工具 + 源码 + 算法 + 职业规划 + 实战,这篇文章以及接下来的文章也是围绕这些内容依次展开。 说到CSS,它现在已经非常的强大,已经支持了许多PS一般的功能了,但是我并不会去说那些部分东西,还是说说通用的或者基础的部分。 首当其冲的是 BFC、弹性布局、垂直居中、移动端/响应式、css预处理、三角和缩放、大屏自适应。
393 0
我明白了,玩转前端面试CSS篇
|
前端开发 程序员 安全
好程序员web前端分享CSS3文本属性
浏览器前缀的简介及应用好程序员web前端分享css3文本属性,某些CSS属性还只是最新版的预览版,并未发布成最终的正式版,而大部分浏览器已经为这些属性提供了支持,但这些属性是小部分浏览器专有的;有些时候,有些浏览器为了扩展某方面的功能,它们会选择新增的一些CSS属性,这些自行扩展的CSS属性也是浏览器专属的。
1076 0
|
Web App开发 前端开发 程序员
好程序员web前端分享CSS属性组成及作用
好程序员web前端分享CSS属性组成及作用 学习目标 1、css属性和属性值的定义2、css文本属性3、css列表属性4、css背景属性5、css边框属性6、css浮动属性一、css属性和属性值的定义 属性:属性是指定选择符所具有的属性,它是css的核心,css2共有150多个属性 属性值:属性值包括法定属性值及常见的数值加单位,如25px,或颜色值等。
1325 0