如图下所示:


简述原理:设置好表格 所需的字段变量以及字段属性,从后台获取j数据后,在js文件中把数据组合成json格式的字符串,利用字段属性把json数据转换成select,就能实现同列不同行select不同内容。

1、设置colNames与colModel,js代码如下:

  colNames: ['全部商品单位','商品单位标识','商品单位比例值','商品基础单价','商品单位'']

  colModel: [{
name:'unitData',hidden:true},{name:'unit_id',hidden:true},{name:'scale_value',hidden:true
},{name:'old_price',
hidden:true},{name:'unit',index:'unit',align:'center',
editable:true,edittype:'custom', editoptions:{custom_element: myelem, custom_value:myvalue},width:150, sortable:false}]

2、js获取到的后他数据对格式进行转换,转成json格式的字符串,js代码如下:

   for (var i = 0; i < arr.length; i++) { //arr是从后台获取的数据
            rows_info['unit'] = arr[i].unit.info.name; //商品单位,用于显示默认的单位
            rows_info['old_price'] = arr[i].buy; //商品基础单价,用于记住默认的单位对应的单价
            rows_info['unit_id'] = arr[i].unit.ape; //商品单位id,用于记住当前所选的单位id,后面有用
            rows_info['scale_value'] = arr[i].unit.info.scale_value; //商品单位比例值,用于记住当前所选的单位与默认单位的换算值
            var unitData = arr[i].unitData;//后台获取的该商品的全部单位数据
            var json = '[';
            for (var j = 0; j < unitData.length; j++) {
               
json += "{'id':"+ unitData[j].id
+",'name':'"+unitData[j].name+"','scale_value':'"+unitData[j].scale_value+"'},";
            }
            json = json.slice(0,-1);
            json += "]";
            rows_info['unitData'] = json; //全部商品单位,转换成json格式的字符串
       }

3、colModel 单位属性的函数,js代码如下:

//触发产生相对应的单位select,还有另一种方法(在最后注释的部分)
function myelem(value, options) {
    var row_id = $("#table").jqGrid('getGridParam','selrow');
    var row  = $("#table").jqGrid('getRowData',row_id);//获取当前行数据
    var el = document.createElement("select");
    var unitData = row.unitData;
    if(unitData!=null&&unitData.length>0)
    {  
          var optvalues = eval(unitData);//html形式的全部单位信息转换成js数据
          console.log(optvalues);  
          for(var i in optvalues){
              var optvalue = optvalues[i].id;  //该单位id
              var optdisplay = optvalues[i].name;//该单位名
              var optlabel = optvalues[i].scale_value;//该单位对于默认单位的比例值(换算值)
              var optel = document.createElement("option");
              optel.innerHTML = optdisplay;  
              optel.value = optvalue;  
              optel.title = optlabel;  
              el.appendChild(optel);      
          }
    }
    return el;
}
//选中单位后触发改变已记住的单位id、单位比例值(两者在存储的时候有用)
function myvalue(elem, operation, value) {
    var row_id=$(elem).context.id;
    // var unit_id = $(elem).find("option:selected").val();
    var unit_id = $(elem).val();
    var scale_value = $(elem).find("option:selected").attr('title');
    $("#table").jqGrid('setCell',row_id,'unit_id',unit_id);//设置单位Id
    $("#table").jqGrid('setCell',row_id,'scale_value',scale_value);//设置单位比例值
    var old_price = $("#table").jqGrid('getCell',row_id,'old_price');//获取商品基础单位时的单价
    $("#table").jqGrid('setCell',row_id,'price',(old_price-0)*(scale_value-0));//设置该单位的单价,基础单价乘以比例值
    return $(elem).find("option:selected").text();
}

//此方法缺点:ajax必须同步请求,请求时间过长,造成编辑的单元格变化缓慢
// function myelem(value, options) {
//      var row_id = $("#table").jqGrid('getGridParam','selrow');
//      var row  = $("#table").jqGrid('getRowData',row_id);//获取当前行数据
//      var html="<select>";
//      $.ajax({
//          type:'post',
//          url:"xxx",
//          async: false, //同步
//          data:{"id":row.set_id},
//          success(re){
//              for (var i = 0; i < re.length; i++) {
//                  html += "<option value='"+re[i].id+"'>"+re[i].name+"</option>";
//              }
//              html += "</select>";
//          }
//      });
//     return html;
// }

jqgrid 同列不同行的<select>不相同的更多相关文章

  1. jqGrid选择列控件向右拖拽超出边界处理

    jqGrid选择列控件向右拖拽超出边界处理 $("#tb_DeviceInfo").jqGrid('navButtonAdd', '#jqGridPager', {         ...

  2. jqGrid冻结列

    jqgrid冻结列 冻结列:就是横向移动表格时,让某一列保持不动 做法: 1.colModel的行要加上属性: frozen:true.注意:冻结列必须从第一列开始,包括隐藏列 2.加载jqgrid后 ...

  3. jqGrid动态列

    HTML代码: <div id="divList"> <div class="toolbar"> </div> <ta ...

  4. jqgrid表格列动态加载的实现

    选中几个测点名,在表格中就显示几列. 具体代码如下: function reloadGrid(postData){ $('#gridTable').jqGrid('GridUnload'); var ...

  5. Jqgrid 序号列宽度调整

    // 遍历jqgrid 使其序号列宽度为45 function setwidth() { $("table[role='grid']").each(function () {//j ...

  6. jqgrid操作列循环显示三个按钮

    首先ajax取数据 $.ajax( { type: "get", url: "../../MECManage/TJYY/collect", cache: fal ...

  7. jqgrid 将列头设置为超链接或按钮

    有时,需要将某个列头设置为超链接或按钮,点击超链接或按钮能够跳转至其他页面(或执行一个事件操作). 可以把 label 值设置成一个a标签或button 代码如下: colModel: [{ labe ...

  8. jquery如何判断表格同一列不同行input数据是否重复

    function hasRepeat(objId,columnIndex){ var arr = []; $("#"+objId+" tbody tr").ea ...

  9. jqgrid 设置冻结列

    有时,jqgrid表格的列非常多,而表格的宽度值是固定的,我们需要在表格底部出现滚动条,并且固定前面几个列作为数据参照项,如何实现? 需要用的jqgrid冻结列,步骤如下: 1)设置需要冻结的列属性, ...

随机推荐

  1. SpringBoot 中常用注解

    本篇博文将介绍几种SpringBoot 中常用注解 其中,各注解的作用为: @PathVaribale 获取url中的数据 @RequestParam 获取请求参数的值 @GetMapping 组合注 ...

  2. 《Android进阶之光》--Android新特性

    Android 5.0新特性 1)全新的Material Design设计风格 2)支持多种设备 3)全新的通知中心设计--按照优先级显示 4)支持64位ART虚拟机 5)多任务视窗Overview ...

  3. [Note] 计算机网络的应用层

    应用层 原理 结构和模型 客户-服务器体系结构(client-server architecture ) 通信不是直接的,需要通过服务器转发 经常会在服务器积压大量的负载 服务器(server) 服务 ...

  4. JVM笔记3-java内存区域之运行时常量池

    1.运行时常量池属于线程共享区中的方法区. 2.运行时常量池用于编译期生成的各种自变量,符号引用,这部分内用将在类加载后接入方法区的运行时常量池中存放. 看如下代码所示,如图: public clas ...

  5. 解决ios不支持按钮:active伪类的方法

    mozilla开发社区上有 :active 不起作用的答案: [1] By default, Safari Mobile does not use the :active state unless t ...

  6. 移动端-手机端-日历选择控件(支持Zepto和JQuery)

    一. 效果图 二. 功能说明 1. 支持切换年份,月份. 2. 支持点击选中日期,也可以点击确定选择日期. 三. 使用方法 1. 添加Input 在你的页面中添加Input输入框.可以再html里,也 ...

  7. R︱sparkR的安装与使用、函数尝试笔记、一些案例

    本节内容转载于博客: wa2003 spark是一个我迟早要攻克的内容呀~ ------------------------------------- 一.SparkR 1.4.0 的安装及使用 1. ...

  8. FFMPEG 实现 YUV,RGB各种图像原始数据之间的转换(swscale)

    FFMPEG中的swscale提供了视频原始数据(YUV420,YUV422,YUV444,RGB24...)之间的转换,分辨率变换等操作,使用起来十分方便,在这里记录一下它的用法. swscale主 ...

  9. WaitForSingleObject函数

    WaitForSingleObject函数 VC声明 DWORD WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds ); VB声明 D ...

  10. Centos运行Mysql因为内存不足进程被杀

    今天刚刚申请了一个新的域名,在申请完域名刚准备绑定给小伙伴分享注册新域名的喜悦时,刚把网站发到我们小伙伴们的讨论群里,却发现访问不了了,提示,数据库连接失败! 真的时一个尴尬.....    所有人都 ...