如何在创建jqgrid后应用列模板

免费的jqgrid在创建后不会应用列模板。 我试过了

var newOrderPriceTemplate = { align: "center", formatter: "showlink", formatoptions: { onClick: function() { alert('clicked'); } } }; $(function () { ... code to create jqgrid into $grid $grid.jqGrid('setColProp', 'Hind', { template: newOrderPriceTemplate, search: false }); }); 

如果在列中单击,则不会出现警告框。 search:false正确删除搜索字段,以便执行setColProp。

如何在创建jqgrid之后但在显示之前应用newOrderPriceTemplate。 如果在创建时在colModel中指定了模板,则它可以正常工作。

使用最新的免费jqgrid,jquery,bootstrap 3,aps.net mvc4,.net 4.6。

我认为存在误解模板如何工作的误解。 模板仅仅是将在$.extend使用的设置列表,用于将colModel一些当前属性与另一个模板属性对象组合在一起。

我建议阅读免费jqGrid代码的代码片段 。 以简化forms,代码看起来像

 for (iCol = 0; iCol < p.colModel.length; iCol++) { p.colModel[iCol] = $.extend(true, {}, p.cmTemplate, p.colModel[iCol].template || {}, p.colModel[iCol]); } 

换句话说,jqGrid将cmTemplate的值,列的template属性和colModel的属性组合在一起。 jqGrid 创建网格之初就完成了它。

因此,如果您有一些模板(例如newOrderPriceTemplate ),您需要在创建网格后应用 ,那么您只需手动使用$.extend来扩展(和覆盖)现有属性:

 var p = $grid.jqGrid("getGridParam"); p.colModel[p.iColByName.Hind] = $.extend(true, {}, p.colModel[p.iColByName.Hind], // old values newOrderPriceTemplate, // the applied template { search: false } // one more setting to apply ); 

p.colModel[p.iColByName.Hind]的当前设置之后放置新属性以便能够覆盖它是很重要的。