我正在尝试在视图模型中显示订单的订单详细信息。点击“订单”和“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.
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] 删除。
我来说两句