jqgrid создает XML из проблемы с данными сетки - PullRequest
1 голос
/ 26 января 2011

У меня есть вопрос, касающийся вопроса: введите описание ссылки здесь Я добавил '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 Ответ

1 голос
/ 26 января 2011

Я полагаю, что ваша проблема будет решена, если вы дополнительно включите пользовательский форматер в пользовательский форматер checkboxFormatter, который вы используете в данный момент.

Не имея отформататора, jqGrid не может прочитать любое значение из сетки. Посмотрите на исходный код jqGrid , в котором реализован неформат для стандартного типа чакбокс.

ОБНОВЛЕНО: Данные будут успешно экспортированы вашим кодом. Проблема, которая у вас, вероятно, другая. Вы включаете пользовательский форматер, который имеет включенные флажки вместо отключенных чечбоксов, созданных предопределенным форматером флажков. В случае, если пользователь меняет состояние какого-либо флажка , вам необходимо вручную обновить параметр data в jqGrid . Поскольку вы этого не сделаете, параметр data будет соответствовать начальным значениям флажков.

Чтобы устранить проблему, вам следует: 1) исправить код вашего неформатного файла myunformatfunc на следующий

function myunformatfunc(cellvalue, options, rowObject)
{
    return $('input',rowObject).attr("checked") ? "1" : "0";
}

2) Вместо jQuery("#confirm_payment").jqGrid('getGridParam','data') вы должны использовать метод jQuery("#confirm_payment").jqGrid('getRowData') (который будет использовать ваш пользовательский формататор). Недостатком метода является то, что он считывает данные только с текущей страницы, но поскольку вы не используете локальную подкачку данных, для вас это не проблема.

На демонстрационной версии вы можете установить / снять флажки с некоторых флажков и нажать кнопку «Экспорт данных в XML». Будут отображены две разные версии XML: одна с учетом getRowData, а другая с getGridParam('data'). Как вы видите, способ 'getRowData' дает фактические значения флажков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...