我对这个问题有疑问:enter link description here 我添加了'datatype:“local”'到我的网格,它工作,我得到了xml,但它确实包含了我在网格中的复选框列。这是我的代码:
<script type="text/javascript" >
var MyExportToXml = function (grid)
{
var dataFromGrid = {row: grid.jqGrid ('getGridParam', 'data') };
var xmldata = '<?xml version="1.0" encoding="utf-8" standalone="yes"?>\n<rows>\n' +
xmlJsonClass.json2xml (dataFromGrid, '\t') + '</rows>';
alert(xmldata);
};
function checkboxFormatter(cellvalue, options, rowObject)
{
var _checkbox_name = options.colModel.name;
var _checkbox_name_id = _checkbox_name + options.rowId;
cellvalue = cellvalue + "";
cellvalue = cellvalue.toLowerCase();
var bchk = cellvalue.search(/(false|0|no|off|n)/i) < 0 ? " checked " : " ";
return "<input type='checkbox' id='"+_checkbox_name_id+"' onclick=\"\" " + bchk + " value='" + cellvalue + "' offval='no' />"
}
function myunformatfunc(cellvalue, options, rowObject)
{
alert(cellvalue);
return cellvalue;
}
jQuery("#confirm_payment").jqGrid({
url:'loadgrid.jsp?type=1',
datatype: "xml",
loadonce:true ,
direction:"rtl",
height: '100%',
width: '100%',
colNames:['test1' , 'test2' , 'test3' , 'test4'],
colModel:[
{name:'test1',xmlmap:'test1', width:18,align:"center",sortable:false ,edittype:"checkbox", formatter: checkboxFormatter ,unformat:myunformatfunc},
{name:'test2',xmlmap:'test2', width:18,align:"center",sortable:false ,edittype:"checkbox", formatter: checkboxFormatter ,unformat:myunformatfunc},
{name:'test3',xmlmap:'test3', width:80, align:"right",sorttype:"int"},
{name:'test4',xmlmap:'test4', width:70, align:"right",sorttype:"int"},
],
xmlReader: {
root:"payments",
row:"payment",
page:"payments>page",
total:"payments>total",
records:"payments>records",
repeatitems:false
},
multiselect: false,
autowidth: true,
forceFit: false,
shrinkToFit: false
});
</script>
如何在创建的xml中包含复选框值? 如果不可能,还有另一种方法从网格中的数据中获取xml吗?
提前感谢。
答案 0 :(得分:1)
我认为您的问题将会解决,因为您还在custom unformatter checkboxFormatter
添加了custom formatter。
没有unformatter,jqGrid无法从网格中读取任何值。查看the source code of jqGrid,它为标准chackbox类型实现了unformatter。
更新:您的代码将成功导出数据。你可能遇到的问题是另一个问题。您包含自定义格式化程序,其中包含已启用复选框,而不是由预定义复选框格式化程序创建的已禁用的chechbox。如果用户更改某个复选框的状态,则必须手动更新jqGrid的data
参数。因为您不这样做,data
参数将对应于复选框的初始值。
要解决此问题,您应该1)将unformatter myunformatfunc
的代码修复为以下
function myunformatfunc(cellvalue, options, rowObject)
{
return $('input',rowObject).attr("checked") ? "1" : "0";
}
2)您应该使用jQuery("#confirm_payment").jqGrid('getRowData')
方法(将使用您的自定义格式化代码)而不是jQuery("#confirm_payment").jqGrid('getGridParam','data')
。该方法的缺点是它只读取当前页面的数据,但由于您不使用本地数据分页,因此对您来说没有问题。
在the demo上,您可以选中/取消选中某些复选框并点击“将数据导出到XML”按钮。将显示两个不同版本的XML:一个关于'getRowData',另一个关于getGridParam('data')
。你怎么看,'getRowData'方式给出了复选框的实际值。