jqgrid从网格数据生成xml问题

时间:2011-01-26 12:48:57

标签: jqgrid

我对这个问题有疑问: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吗?

提前感谢。

1 个答案:

答案 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'方式给出了复选框的实际值。