размещение дополнительных данных в режиме редактирования jquery jqgrid и пользовательских проверок для встроенного редактирования - PullRequest
0 голосов
/ 15 ноября 2010

Я использую jqgrid, где мне нужно передать дополнительные данные в контроллер во время редактирования ... но я не могу это сделать ... вот мой код ниже ..

 <script type="text/javascript">

//

        var checkMileageLimit = function (value, colname) {

            var clName = (colname == 'MileageLimitPM' ? 'MileageLimitAM' : 'MileageLimitPM');

            if (parseInt(value) + parseInt($('#' + clName).val()) > parseInt($("#TotalMileage").val())) {
                return [false, "sum of AM and PM mileage should not  exceed Total Mileage", ""];
            }
            else return [true, "", ""];
        };

        var checkTouchLimit = function (value, colname) {

            var clName = (colname == 'TouchLimitPM' ? 'TouchLimitAM' : 'TouchLimitPM');

            if (parseInt(value) + parseInt($('#' + clName).val()) > parseInt($("#TotalTouches").val())) {
                return [false, "sum of AM and PM Touches should not  exceed Total Touches", ""];
            }
            else return [true, "", ""];
        };

        var lastsel;
        $("#list").jqGrid({
            url: '<%= Url.Action("GetScheduleInfo", "TouchSchedule") %>',
            datatype: 'json',
            mtype: 'GET',
            postData: {
                StartDate: function () { return $('#StartDate').val(); },
                EndDate: function () { return $('#EndDate').val(); },
                siteId: function () { return $('#ListFacility').length == 0 ? -1 : $('#ListFacility').val(); }
            },
            colNames: ['RowID', 'SiteID', 'CalDate', 'Store Open', 'Start Time', 'End Time',
                   'MileageLimit AM', 'MileageLimit PM', 'TouchLimit PM',
                   'TouchLimit AM', 'Total Touches', 'Total Mileage', 'WeekDay'],
            colModel: [
            { name: 'RowID', index: 'RowID', width: 40, key: true, editable: true, editrules: { edithidden: false }, hidedlg: true, hidden: true },
            { name: 'SiteID', index: 'SiteID', width: 40, /* key: true,*/editable: true, editrules: { edithidden: false }, hidedlg: true, hidden: true },
            { name: 'CalDate', index: 'CalDate', width: 100, formatter: 'date', datefmt: 'm/d/Y', editable: false, formoptions: { elmsuffix: ' *'} },
            { name: 'StoreOpen', index: 'StoreOpen', width: 40, editable: true, edittype: 'select', formatter: 'select', editrules: { required: true }, formoptions: { elmsuffix: ' *' }, editoptions: { value: { o: 'Open', c: 'closed'} }, width: "40" },
            { name: 'StartTime', index: 'StartTime', width: 100, editable: true, formatter: 'date', masks: 'ShortTime', edittype: 'text', editrules: { time: true, required: true }, formoptions: { elmsuffix: ' *'} },
            { name: 'EndTime', index: 'EndTime', width: 100, editable: true, edittype: 'text', editrules: { time: true, required: true }, formoptions: { elmsuffix: ' *'} },
            { name: 'MileageLimitAM', index: 'MileageLimitAM', width: 50, editable: true, formatter: 'integer',
                edittype: 'text', editrules: { custom: true, custom_func: checkMileageLimit,
                    required: true
                }, formoptions: { elmsuffix: ' *' }
            },
            { name: 'MileageLimitPM', index: 'MileageLimitPM', width: 50, editable: true, edittype: 'text', formatter: 'integer', editrules: { custom: true, custom_func: checkMileageLimit, required: true }, formoptions: { elmsuffix: ' *'} },
            { name: 'TouchLimitAM', index: 'TouchLimitAM', width: 50, editable: true, edittype: 'text', formatter: 'integer', editrules: { custom: true, custom_func: checkTouchLimit, required: true }, formoptions: { elmsuffix: ' *'} },
            { name: 'TouchLimitPM', index: 'TouchLimitPM', width: 50, editable: true, edittype: 'text', formatter: 'integer', editrules: { custom: true, custom_func: checkTouchLimit, required: true }, formoptions: { elmsuffix: ' *'} },
            { name: 'TotalTouches', index: 'TotalTouches', width: 50, editable: true, edittype: 'text', editrules: { required: true }, formoptions: { elmsuffix: ' *'} },
            { name: 'TotalMileage', index: 'TotalMileage', width: 50, editable: true, edittype: 'text', editrules: { required: true }, formoptions: { elmsuffix: ' *'} },
            { name: 'WeekDay', index: 'WeekDay', width: 200, editable: false, hidden: false }
        ],
            pager: $('#listPager'),
            rowNum: 10,
            rowList: [10, 20, 30],
            sortname: 'CalDate',
            sortorder: "desc",
            viewrecords: true,
            caption: 'Schedule Calendar',
            autowidth: false,
            gridview: true,
            id: "RowID",    

            ondblClickRow: function (id) {

                if (id && id !== lastsel) {
                    jQuery('#list').jqGrid('restoreRow', lastsel);
                    jQuery('#list').jqGrid('editGridRow', id,{ onclickSubmit});
                    lastsel = id;
                }

            }
          , editurl: '<%= Url.Action("UpdateGrid", "TouchSchedule") %>'

        }).navGrid('#listPager',
               { edit: true, add: false, del: false, search: false, refresh: true },
                 {width:400,height:400,closeAfterEdit:true,
                onclickSubmit:function(params) {   var ajaxData = {};

                var list = $("#list");
                var selectedRow = list.getGridParam("selrow");
                rowData = list.getRowData(selectedRow);
                ajaxData = { CalDate: rowData.CalDate };

                return ajaxData; }}

    );

        $('#btnSubmit').click(function () {
            $("#list").clearGridData();
            $("#list").trigger("reloadGrid");

        });
    });

//]]>

Пожалуйста, дайте мне знать, где я ошибаюсь ... также я заметил, что если я использую встроенное редактирование, то пользовательская проверка не запускается?как решить эту проблему с помощью встроенного редактирования?

заранее спасибо ...

Ответы [ 2 ]

5 голосов
/ 15 ноября 2010

Прежде всего, вы вообще не используете встроенное редактирование в своем коде. Вы используете editGridRow и неправильно:

jQuery('#list').jqGrid('editGridRow', id,{ onclickSubmit});

вместо использования editRow , используемого в режиме встроенного редактирования.

Вы должны как минимум установить значение для дескриптора события onclickSubmit:

jQuery('#list').jqGrid('editGridRow', id,
                       { onclickSubmit : function(params, posdata) {
                                             alert ("in onclickSubmit");
                                             // ...
                                         }
                       });

Кроме того, вы пытаетесь использовать проверку, основанную не на параметре value, который вы получаете в качестве параметра пользовательской функции проверки. Вы пытаетесь прочитать другие текстовые поля. Вы должны понимать, что это не лучший способ. Более того, в случае встроенного редактирования текстовые поля будут содержать идентификаторы, не похожие на соответствующие имена столбцов. Таким образом, использование $("#TotalMileage") будет приемлемо для редактирования формы, но оно должно быть $("#"+rowid+"_TotalMileage") в случае встроенного редактирования.

Вы можете дополнительно использовать функцию beforeCheckValues ​​, которая будет использовать все поля данных, которые будут опубликованы. Функция будет вызываться до проверки каждого поля формы. В случае встроенного редактирования это невозможно, поэтому вам придется каким-либо образом определить используемый вами режим (например, вы можете установить переменную, которая определяет текущее значение вручную) и использовать соответствующее преобразование имен идентификаторов полей. Другим способом является использование dataEvents с, например, обработчиком событий 'change'.

Для отправки дополнительных данных в случае редактирования формы вы можете использовать editData, вернуть объект с дополнительными данными из onclickSubmit или вашей пользовательской функции serializeEditData. Вы также можете изменить URL-адрес, используемый при публикации данных внутри функции onclickSubmit.

Для отправки дополнительных данных в режиме встроенного редактирования вы можете использовать параметр extraparam параметра editRow или использовать параметр inlineData элемента jqGrid.

Еще одно замечание в конце. Вы должны начать использовать голосование ваших ответов и принятие ответов. По крайней мере, вы должны прокомментировать другой ответ и опубликовать дополнительную информацию, необходимую для ответа на ваши вопросы. Например, некоторое время назад вы уже задали почти такой же вопрос , и я попросил вас опубликовать HTML-код. Многие другие ваши вопросы остаются без комментариев, и не ясно, читали ли вы там хотя бы. Так будет продолжаться, вы будете получать меньше ответов или вообще не будете их получать.

0 голосов
/ 15 ноября 2010

С первого взгляда я бы сказал, что это как-то связано с тем, что вы используете GET, а не POST. Get объединит данные в строку запроса. Это может мешать работе сетки.

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