jqgrid - 'setCell' 在 Frozen 列中不起作用
jqgrid - 'setCell' is not working in Frozen column
我有一个具有冻结列的 jqgrid。我必须更新冻结列中的单元格值,但它不起作用。
这是提琴手:https://jsfiddle.net/99x50s2s/5/
HTML
<table id="sg2"></table>
<div id="psg2"></div>
<br>
<button type='button' id="SetGrid2">Update 'client' in first row of Grid 2</button>
JAVASCRIPT
jQuery("#sg2").jqGrid({
datatype: "local",
gridview: true,
loadonce: true,
shrinkToFit: false,
autoencode: true,
width:500,
height: 'auto',
viewrecords: true,
sortorder: "desc",
scrollrows: true,
loadui: 'disable',
colNames:['Inv No','Date', 'Client', 'Amount','Tax','Total','Notes'],
colModel:[
{name:'id',index:'id', width:60, sorttype:"int",frozen: true },
{name:'invdate',index:'invdate', width:90, sorttype:"date",frozen: true },
{name:'name',index:'name', width:100,frozen: true },
{name:'amount',index:'amount', width:80, align:"right",sorttype:"float"},
{name:'tax',index:'tax', width:80, align:"right",sorttype:"float"},
{name:'total',index:'total', width:80,align:"right",sorttype:"float"},
{name:'note',index:'note', width:150, sortable:false}
],
caption: "Grid 2 - with Frozen columns"
}).jqGrid('setFrozenColumns');
var mydata = [
{id:"1",invdate:"2007-10-01",name:"test 1234567890123456789",note:"note",amount:"200.00",tax:"10.00",total:"210.00"},
{id:"2",invdate:"2007-10-02",name:"test2",note:"note2",amount:"300.00",tax:"20.00",total:"320.00"}
];
for(var i=0;i<=mydata.length;i++)
jQuery("#sg2").jqGrid('addRowData',i+1,mydata[i]);
$('#SetGrid2').on('click', function(){
jQuery("#sg2").jqGrid('setCell', 1, 'name', 'Updated');
});
我在 jqgrid 中使用 'setCell' 功能来设置单元格值。如果冻结的 属性 从该列中删除,或者如果该列已排序,我将看到新值。
我是否遗漏了任何特定于冻结列的内容?
环境:jqgrid插件4.6.0,IE 9
应用的解决方案:
就我而言,我无法将 jqGrid 插件更新到最新版本。因此,销毁并设置冻结列作为解决方法,效果很好。
myGrid.jqGrid('destroyFrozenColumns');
if (rowData.Id == 0) {
myGrid.jqGrid('setCell', rowid, 'Edit', 'New');
}
else {
myGrid.jqGrid('setCell', rowid, 'Edit', null);
}
myGrid.jqGrid('setFrozenColumns');
没错。 jqGrid 4.6.0 不支持 setCell
、setRowData
以及单元格或内联编辑与冻结列的组合。我最近才在 free jqGrid 中实现了该功能(在发布免费的 jqGrid 4.8 之后)。我还从本质上改进了冻结列的性能。
您可以验证修改后的演示 https://jsfiddle.net/OlegKi/99x50s2s/9/ 是否正常工作。
我建议您不要使用 addRowData
填充网格,而应使用 data: mydata
。此外,如果您使用相同的 rowids 填充多个网格,则应使用 idPrefix
(两个网格的值不同):
idPrefix: "g1_",
您当然可以使用免费 jqGrid 的许多新功能。 The wiki and readme https://jsfiddle.net/OlegKi/99x50s2s/11/
是unclear from the wiki,但是无法编辑冻结的列(包括setCell
函数。)
这可以通过解冻列、设置单元格值,然后在 'click' 事件结束时再次冻结它们来处理:
$('#SetGrid2').on('click', function(){
jQuery('#sg2').jqGrid('destroyFrozenColumns');
var cell = jQuery("#sg2").jqGrid('setCell', 1, 'name', 'Updated');
jQuery('#sg2').jqGrid('setFrozenColumns');
});
[后人注意事项] - 如果你想动态更改哪些列被冻结,你可以通过解冻 - setting/unsetting 冻结 - 然后重新冻结来实现,但是您还必须致电 trigger
.
// freezes the amount col as well...
$('#SetGrid2').on('click', function(){
jQuery("#sg2")
.jqGrid('destroyFrozenColumns')
.jqGrid('setColProp','amount', {frozen:true})
.jqGrid('setFrozenColumns')
.trigger('reloadGrid', [{current:true}])
});
我有一个具有冻结列的 jqgrid。我必须更新冻结列中的单元格值,但它不起作用。
这是提琴手:https://jsfiddle.net/99x50s2s/5/
HTML
<table id="sg2"></table>
<div id="psg2"></div>
<br>
<button type='button' id="SetGrid2">Update 'client' in first row of Grid 2</button>
JAVASCRIPT
jQuery("#sg2").jqGrid({
datatype: "local",
gridview: true,
loadonce: true,
shrinkToFit: false,
autoencode: true,
width:500,
height: 'auto',
viewrecords: true,
sortorder: "desc",
scrollrows: true,
loadui: 'disable',
colNames:['Inv No','Date', 'Client', 'Amount','Tax','Total','Notes'],
colModel:[
{name:'id',index:'id', width:60, sorttype:"int",frozen: true },
{name:'invdate',index:'invdate', width:90, sorttype:"date",frozen: true },
{name:'name',index:'name', width:100,frozen: true },
{name:'amount',index:'amount', width:80, align:"right",sorttype:"float"},
{name:'tax',index:'tax', width:80, align:"right",sorttype:"float"},
{name:'total',index:'total', width:80,align:"right",sorttype:"float"},
{name:'note',index:'note', width:150, sortable:false}
],
caption: "Grid 2 - with Frozen columns"
}).jqGrid('setFrozenColumns');
var mydata = [
{id:"1",invdate:"2007-10-01",name:"test 1234567890123456789",note:"note",amount:"200.00",tax:"10.00",total:"210.00"},
{id:"2",invdate:"2007-10-02",name:"test2",note:"note2",amount:"300.00",tax:"20.00",total:"320.00"}
];
for(var i=0;i<=mydata.length;i++)
jQuery("#sg2").jqGrid('addRowData',i+1,mydata[i]);
$('#SetGrid2').on('click', function(){
jQuery("#sg2").jqGrid('setCell', 1, 'name', 'Updated');
});
我在 jqgrid 中使用 'setCell' 功能来设置单元格值。如果冻结的 属性 从该列中删除,或者如果该列已排序,我将看到新值。
我是否遗漏了任何特定于冻结列的内容?
环境:jqgrid插件4.6.0,IE 9
应用的解决方案:
就我而言,我无法将 jqGrid 插件更新到最新版本。因此,销毁并设置冻结列作为解决方法,效果很好。
myGrid.jqGrid('destroyFrozenColumns');
if (rowData.Id == 0) {
myGrid.jqGrid('setCell', rowid, 'Edit', 'New');
}
else {
myGrid.jqGrid('setCell', rowid, 'Edit', null);
}
myGrid.jqGrid('setFrozenColumns');
没错。 jqGrid 4.6.0 不支持 setCell
、setRowData
以及单元格或内联编辑与冻结列的组合。我最近才在 free jqGrid 中实现了该功能(在发布免费的 jqGrid 4.8 之后)。我还从本质上改进了冻结列的性能。
您可以验证修改后的演示 https://jsfiddle.net/OlegKi/99x50s2s/9/ 是否正常工作。
我建议您不要使用 addRowData
填充网格,而应使用 data: mydata
。此外,如果您使用相同的 rowids 填充多个网格,则应使用 idPrefix
(两个网格的值不同):
idPrefix: "g1_",
您当然可以使用免费 jqGrid 的许多新功能。 The wiki and readme https://jsfiddle.net/OlegKi/99x50s2s/11/
是unclear from the wiki,但是无法编辑冻结的列(包括setCell
函数。)
这可以通过解冻列、设置单元格值,然后在 'click' 事件结束时再次冻结它们来处理:
$('#SetGrid2').on('click', function(){
jQuery('#sg2').jqGrid('destroyFrozenColumns');
var cell = jQuery("#sg2").jqGrid('setCell', 1, 'name', 'Updated');
jQuery('#sg2').jqGrid('setFrozenColumns');
});
[后人注意事项] - 如果你想动态更改哪些列被冻结,你可以通过解冻 - setting/unsetting 冻结 - 然后重新冻结来实现,但是您还必须致电 trigger
.
// freezes the amount col as well...
$('#SetGrid2').on('click', function(){
jQuery("#sg2")
.jqGrid('destroyFrozenColumns')
.jqGrid('setColProp','amount', {frozen:true})
.jqGrid('setFrozenColumns')
.trigger('reloadGrid', [{current:true}])
});