在jqGrid的View模型中添加自定义行

CJ框架

我正在尝试在视图模型中显示订单的订单详细信息。点击“订单”和“view传呼机”按钮以传递orderID使用那个orderID,我在另一个地方搜索local json array我正在制作一个包含搜索结果数组值的表,并将其添加为视图模型中已在使用的各行之间的新行,如下图所示。

使用自定义行查看模型页面

(从上面的图像中,我为带颜色边框的行是新创建的行。其他行默认情况下是由jqGrid创建的。)

我成功创建了其他行。但是在视图模型中单击视图的下一个或上一个记录按钮时,这会带来一些麻烦。看到下面的图片,

使用客户行和重复数据查看模型

(different row's table column value append in a single row repeatedly)

In this I navigate records 8 times through next (#nData) and previous (#pData) buttons. While doing this, leftside <td> of my custome row's text "Order Particulars" and the next auto generated row's (Total) right side <td>'s text repated 8 times. My each click on next or previous, it appends new row after my custom row.

Here is my code,

  var myData2 = <?php echo json_encode($oParticularResult) ?>;
  //Here I'm adding custom row
  var showIdRow = function ($form) {
  var $this = $(this),
  rowid = $this.jqGrid("getGridParam", "selrow");
  var addHTML = '<tr class="FormData" id="trv_particulars"><td class="CaptionTD form-view-label ui-widget-content" 

width="30%"><b>Order Particulars</b></td>';
  addHTML += '<td class="DataTD form-view-data ui-helper-reset ui-widget-content" id="v_tot"><span>';
    addHTML += "<table border='2px'><thead><tr><td>Sl.No.</td><td>Particulars 

Name</td><td>Quantity</td><td>Amount</td></tr></thead><tbody>";
    var count = 1;
  for (i in myData2)
  {
  if(myData2[i].orderID == rowid)
  {
     addHTML += "<tr><td>"+count+"</td><td>"+myData2[i].proName+"</td><td>"+myData2[i].proQuantity+"</td><td>"+myData2

[i].proPrice+"</td></tr>";
     count++;
  }
    }
    $(addHTML).insertAfter('#trv_order_dt');
    };
    $(function () {
    var myData = <?php echo json_encode($orderResult) ?>;
  var getCellVal;
  var sel_id;
  $("#orderGrid").jqGrid({
  caption:'Order List',
  datatype:'local',
  data:myData,
  mtype:'POST',
  width:777,
  rowNum:10,
  height:100,
  sortorder:'asc',
  rowList:[10,20,30],
  rownumbers:true,
  viewrecords:true,
  gridview:false,
  autoencode:true,
  loadonce:true,
  pager:'#orderPager',
  sortname:'orderID',

  editurl:'<?php echo $this->action('editStatus'); ?>',
  colNames:['Order Number','Customer Name','Date', 'Total', 'Paid','Balance'],
  //cmTemplate:{editable:true, editrules: {required:true}},
  colModel:[
  { name:'orderID', key:true, width:30 },
  { name: 'custName', index: 'custName', width:60 },
  { name: 'order_dt', index: 'order_dt', width:60 },
  { name: 'tot', index: 'tot', width:60 },
  { name: 'amount', index: 'amount', width:60 },
  { name: 'bal', index: 'bal', width:60 }],
  }).navGrid("#orderPager",
  {add:false, edit:false, view:true, del:false, search:true, refresh:true },
  {},//edit
  {jqModal: true, viewPagerButtons: true, checkOnUpdate:true, savekey: [true,13], navkeys: [false,38,40], checkOnSubmit : 

true, reloadAfterSubmit:false, closeOnEscape:true, closeAfterEdit: true,width:600, height:300}, //add
  {jqModal: true, reloadAfterSubmit:true, closeOnEscape: true,width:600, height:300}, //del
  {jqModal: true, closeAfterSearch: true, closeOnEscape: true, multipleSearch: true, multipleGroup:false, showQuery: true, 

overlay: true, recreateFilter: true,width:600, height:300 }, //search
  {jqModal: true, closeOnEscape: true, width:500,
  recreateForm: true,
  afterclickPgButtons: showIdRow,
  beforeShowForm: showIdRow
  } //view
  );
  });

Any one could point out where I missed ?

And I want to configure subgrid, using my local data myData2 like the above condition. If orderID of myData(local json array for master grid) and myData2 (local json array for subgrid) are same, show those myData2 records below to parent grid row. I think all grids are it is subgrid concept already configured like the same. But I could not find any correct document or example for this. Please provide any links to configure subgrid as per the above.

SOLUTION :

I fixed my issue. This view model refresh each time when we clicking on next or previous button in this model. Because, I used recreateform:true and I'm calling the showIdRow on afterclickPgButtons and beforeShowForm.

I think it will not consider the my manually added row as one of the form value. Because when the form creation, the contents are loading from myData (data source of this grid). So, when I navigate through the next or previous button, recreateform is working for other rows and afterclickPgButtons' and 'beforeShowForm are calling showIdRow and appending new row below to already created row.

So, I decided to remove previously created a new row, while appending a new row. I already assigned my custom row id as trv_particulars. So, I used my code like this,

.
.
$('#tvr_Particulars').remove();  // remove previously created custome row using row ID
$('#trv_order_dt').after(addHTML);
.
.

Now its working fine in my scenario. But alternative and optimal solution is provided by @Oleg in the below answer. Thanks to @Oleg for taking your time to create another possible solution for my issue.

Oleg

I find your question interesting and so I created the demo which demonstrates a possible implementation of such requirements. The results of the View looks like on the picture below:

在此处输入图片说明

Some comments to the implementation. First of all I used input data for the grid which contains detailed information needed to create "Order Details" ("Order Particulars") in the view:

var mydata = [
        { id: "1",  invdate: "2007-10-21", name: "test",   note: "3note",   amount: "200.00", tax: "10.00", closed: true,  ship_via: "TN", total: "210.00",
            subgrid: [{no: "1", amount: "750"}, {no: "2", amount: "750"}, {no: "3", amount: "600"}, {no: "4", amount: "900"}] },
        { id: "2",  invdate: "2007-10-22", name: "test2",  note: "3note2",  amount: "300.00", tax: "20.00", closed: false, ship_via: "FE", total: "320.00",
            subgrid: [{no: "1", amount: "750"}, {no: "2", amount: "600"}, {no: "3", amount: "900"}] },
        ...
    ];

subgrid property of every item contains the information.

Next, I insert in the table of the View form the custom row with "Order Details" ("Order Particulars") after the row with information about "close" column. I use the code

$("#trv_closed").after('<tr class="FormData">' +
    '<td class="CaptionTD form-view-label ui-widget-content" width="40%"><b>Order Particulars</b></td>' +
    '<td class="DataTD form-view-data ui-helper-reset ui-widget-content"><div style="width:100%;height:100%">' +
    '<table id="mysubgrid"><tr><td>' +
    '</td></tr></table>' +
    '</div></td></tr>');

to add the row after the row "#trv_closed" (the id of the row will be constructed based on the name of "close" column).

然后可以以不同的方式显示当前显示行的rowid。第一种方法是获取当前选定的行$this.jqGrid("getGridParam", "selrow")另一种方式:可以从包含<input>具有rowid的元素的隐藏列中获取信息可以<input>通过id="id_g"$("#id_g").val())或name="id"$form.find("input[name=id]").val()来寻址元素$("#id_g").val()在代码中使用。

现在,可以subgrid使用来获取所选行的属性getLocalRow(因为我们使用datatype: "local"):

var localRowData = $this.jqGrid("getLocalRow", rowid);
// localRowData.subgrid contains the required data

所以完整的代码是

$("#list").jqGrid("navGrid", "#pager", {edit: false, add: false, del: false, view: true, search: false}, {}, {}, {}, {}, {
    recreateForm: true,
    afterclickPgButtons: function (buttonName, $form, pos) {
        showDetails.call(this, $form);
    },
    beforeShowForm: showDetails,
    labelswidth: '40%'
});

函数showDetails定义如下

var showDetails = function ($form) {
    var $this = $(this),
        rowid1 = $this.jqGrid("getGridParam", "selrow"),
        rowid = $("#id_g").val(), //id2 = $form.find("input[name=id]").val(),
        localRowData = $this.jqGrid("getLocalRow", rowid);
    if (isClosed === "Yes") {
        $("#trv_id").show();
    }
    if ($("#mysubgrid").length === 0) {
        // if not in afterclickPgButtons for example
        $("#trv_closed").after('<tr class="FormData">' +
            '<td class="CaptionTD form-view-label ui-widget-content" width="40%"><b>Order Particulars</b></td>' +
            '<td class="DataTD form-view-data ui-helper-reset ui-widget-content"><div style="width:100%;height:100%">' +
            '<table id="mysubgrid"><tr><td>' +
            '</td></tr></table>' +
            '</div></td></tr>');
         $("#mysubgrid").jqGrid({
             datatype: "local",
             data: localRowData.subgrid,
             colNames: ["#", "Amount"],
             colModel: [
                 {name: "no", width: 40, sorttype: "integer"},
                 {name: "amount", width: 70, sorttype: "integer"}
             ],
             idPrefix: "s",
             sortname: "no",
             rowNum: 1000,
             height: "auto"
         });
    } else {
        // update $("#mysubgrid") with new data
        $("#mysubgrid").jqGrid("clearGridData")
            .jqGrid("setGridParam", {data: localRowData.subgrid})
            .trigger("reloadGrid");
    }
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在视图集使用的 Django 模型中添加列的自定义行级处理

来自分类Dev

在ggplot barplot中添加自定义行

来自分类Dev

在Prestashop ModuleAdminController中添加自定义行操作

来自分类Dev

在ggplot barplot中添加自定义行

来自分类Dev

在foreach列表中添加自定义行

来自分类Dev

添加自定义行号

来自分类Dev

添加自定义行号

来自分类Dev

如何在自定义中插入和添加自定义行?

来自分类Dev

ListView中的自定义行

来自分类Dev

jqgrid如何添加自定义自定义错误以显示在表中

来自分类Dev

如何在反应移动式中添加自定义行?

来自分类Dev

如何将自定义行号添加到文件中

来自分类Dev

使用CFWHEELS在模型中添加自定义方法

来自分类Dev

在Django管理中添加自定义模型方法

来自分类Dev

在雄辩的模型中添加自定义属性

来自分类Dev

如何使用bash在自定义行中插入值

来自分类Dev

pyqt4 QFileSystemModel中的条件自定义行

来自分类Dev

在WPF DataGrid中自定义行组

来自分类Dev

数据透视表中的自定义行标签

来自分类Dev

在WPF DataGrid中自定义行组

来自分类Dev

使用自定义适配器的ListView中的自定义行

来自分类Dev

如何在一个Recyclerview中添加两个自定义行而不替换项目?

来自分类Dev

Javascript-ExtJs-如何在数据网格的第n行中添加自定义行?

来自分类Dev

如何在Spring Data Jpa生成的查询中添加一些自定义行为?

来自分类Dev

jqGrid中仅针对编辑模式而不是添加模式的自定义函数

来自分类Dev

如何添加自定义行以将数据添加到ember-table?

来自分类Dev

扩展自定义行为

来自分类Dev

使用awk打印自定义行

来自分类Dev

访问TableView的自定义行

Related 相关文章

热门标签

归档