несколько кнопок редактирования и удаления при перезагрузке jqGrid - PullRequest
0 голосов
/ 09 ноября 2010

я использую jqGrid вместе с asp.net mvc2 ... проблема в том, что я вызываю сетку при нажатии кнопки .. теперь всегда, если я нажимаю кнопку, сетка перезагружается, но кнопки редактирования и обновления отображаются большечем один раз .. как решить эту проблему?вот изображение alt text

function BindGrid() {
    if (!firstClick) {
        $("#list").trigger("reloadGrid");
    }
    firstClick = false;
    /* Refreshes the grid */
    $("#list").jqGrid({
        url: '<%= Url.Action("GetScheduleInfo", "TouchSchedule") %>',
        datatype: 'json',
        mtype: 'GET',
        postData: { StartDate: $('#StartDate').val(), EndDate: $('#EndDate').val(),
                    siteId: $('#ListFacility') ? $('#ListFacility').val() : -1 },
        colNames: ['SiteID', 'Cal Date', 'Store Open', 'Start Time', 'End Time',
                   'MileageLimit AM', 'MileageLimit PM', 'TouchLimit PM',
                   'TouchLimit AM', 'Total Touches', 'Total Mileage', 'IsWeekend'],
        colModel: [
            { name: 'SiteID', index: 'SiteID', width: 40, align: 'left',
              /* key: true,*/editable: false, editrules: { edithidden: false },
              hidedlg: true, hidden: false },
            { name: 'CalDate', index: 'CalDate', width: 100, align: 'left',
              formatter: 'date', datefmt: 'm/d/Y', editable: true, edittype: 'text',
              editrules: { required: true, date: true },
              formoptions: { elmsuffix: ' *'} },
            { name: 'StoreOpen', index: 'StoreOpen', width: 40, align: 'left',
              editable: true, edittype: 'select', formatter: 'select',
              editrules: { required: true }, formoptions: { elmsuffix: ' *' },
              editoptions: { dataInit: function (elem) {
                 $(elem).empty()
                        .append("<option value='1'>o</option>")
                        .append("<option value='2'>c</option>");
                 }
              } },
            { name: 'StartTime', index: 'StartTime', width: 100, align: 'left',
              formatter: 'date', datefmt: 'g:i A', editable: true, edittype: 'text',
              editrules: { required: true, date: true },
              formoptions: { elmsuffix: ' *'} },
            { name: 'EndTime', index: 'EndTime', width: 100, align: 'left',
              formatter: 'date', datefmt: 'g:i A', editable: true, edittype: 'text',
              editrules: { required: true }, formoptions: { elmsuffix: ' *'} },
            { name: 'MileageLimitAM', index: 'MileageLimitAM', width: 50,
              align: 'left', editable: true, edittype: 'text',
              editrules: { required: true }, formoptions: { elmsuffix: ' *'} },
            { name: 'MileageLimitPM', index: 'MileageLimitPM', width: 50,
              align: 'left', editable: true, edittype: 'text',
              editrules: { required: true }, formoptions: { elmsuffix: ' *'} },
            { name: 'TouchLimitAM', index: 'TouchLimitAM', width: 50,
              align: 'left', editable: true, edittype: 'text',
              editrules: { required: true }, formoptions: { elmsuffix: ' *'} },
            { name: 'TouchLimitPM', index: 'TouchLimitPM', width: 50,
              align: 'left', editable: true, edittype: 'text',
              editrules: { required: true }, formoptions: { elmsuffix: ' *'} },
            { name: 'TotalTouches', index: 'TotalTouches', width: 50,
              align: 'left', editable: true, edittype: 'text',
              editrules: { required: true }, formoptions: { elmsuffix: ' *'} },
            { name: 'TotalMileage', index: 'TotalMileage', width: 50,
              align: 'left', editable: true, edittype: 'text',
              editrules: { required: true }, formoptions: { elmsuffix: ' *'} },
            { name: 'IsWeekend', index: 'IsWeekend', width: 200,
              align: 'left', editable: false, hidden: false}
        ],
        pager: $('#listPager'),
        rowNum: 10,
        rowList: [10, 20, 30],
        sortname: 'CalDate',
        sortorder: "desc",
        viewrecords: true,
        caption: 'Schedule Calendar',
        autowidth: true,
        afterInsertRow: function (rowid, rowdata) {
            if (rowdata.IsWeekend)
                $(this).jqGrid('setRowData', rowid, false, { color: 'blue' });
        }
    }).navGrid('#listPager',
               { edit:true, add:false, del:false, search:false, refresh:true });

}

Ответы [ 2 ]

1 голос
/ 09 ноября 2010

Вы должны создать сетку с $("#list").jqGrid({...}) и добавить кнопки навигации с navGrid только один раз . Я полагаю, что ваша функция BindGrid будет вызываться дважды в вашей программе, поэтому у вас есть все кнопки два раза. Вы можете легко проверить это, добавив дополнительную alert("in BindGrid"); где-то внутри BindGrid функции.

ОБНОВЛЕНО : Я прочитал ваш код и вот мое предложение:

<script type="text/javascript">
//<![CDATA[
    $(document).ready(function () {
        $("#StartDate").datepicker({
            changeMonth: false,
            changeYear: false
        });
        $("#EndDate").datepicker();

        var checkMileageLimit = function(value, colname) {
            alert($("#TotalMileage").val());
            if (value > $("#TotalMileage").val()) {
                alert(false);
                return ["false", "value shuld be less"];
            } else {
                alert(true);
                return ["true",""];
            }
        };

        $("#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') ? $('#ListFacility').val() : -1; }
            },
            colNames: ['SiteID', 'Cal Date', 'Store Open', 'Start Time', 'End Time',
                       'MileageLimit AM', 'MileageLimit PM', 'TouchLimit PM',
                       'TouchLimit AM', 'Total Touches', 'Total Mileage', 'WeekDay'],
            colModel: [
                { name: 'SiteID', index: 'SiteID', width: 40, /* key: true,*/editable: false, editrules: { edithidden: false }, hidedlg: true, hidden: false },
                { name: 'CalDate', index: 'CalDate', width: 100, formatter: 'date', datefmt: 'm/d/Y', editable: true, edittype: 'text', editrules: { required: true, date: true }, 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'}} },
                { 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,
                  edittype: 'text', editrules: { custom: true, custom_func: checkMileageLimit,
                  required: true }, formoptions: { elmsuffix: ' *'} },
                { name: 'MileageLimitPM', index: 'MileageLimitPM', width: 50, editable: true, edittype: 'text', editrules: { required: true }, formoptions: { elmsuffix: ' *'} },
                { name: 'TouchLimitAM', index: 'TouchLimitAM', width: 50, editable: true, edittype: 'text', editrules: { required: true }, formoptions: { elmsuffix: ' *'} },
                { name: 'TouchLimitPM', index: 'TouchLimitPM', width: 50, editable: true, edittype: 'text', editrules: { 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,
            afterInsertRow: function (rowid, rowdata) {
                if (rowdata.IsWeekend) {
                    $(this).jqGrid('setRowData', rowid, false, { color: 'blue' });
                }
            }
        }).navGrid('#listPager',
                   { edit: true, add: false, del: false, search: false, refresh: true }
        );

        $('#btnSubmit').click(function () {
            $("#list").trigger("reloadGrid");
        });
    });
//]]>
</script>

Я рекомендую вам использовать postData со свойствами в качестве функций , тогда при каждом обновлении будет вызываться функция, и вы можете получить фактические значения из соответствующих элементов управления HTML. Вы можете прочитать больше о технике в моем старом ответе . Другие небольшие изменения вы, вероятно, найдете сами.

Более того, заявление

$('#ListFacility') ? $('#ListFacility').val() : -1;

мне кажется неправильным, потому что $('#ListFacility') всегда будет объектом. Потому что вы не публикуете и HTML-код, я не могу это исправить. Ты должен сделать это сам.

Более того, возможно, у вас будет лучшая производительность в вашей сетке, если вы будете использовать gridview:true и установить цвет внутри функции loadComplete вместо использования функции afterInsertRow. См. этот старый ответ в качестве примера и описания опции gridview .

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

Спасибо за ваш ответ ... это сработало, я поместил if if в нажатие кнопки, чтобы проверить, является ли это первым щелчком или последующими щелчками, а затем сработало ... но когда я вызываю reloadgrid, я все еще вижу тот же старыйПарметры передаются в контроллер. Это текстовые поля и выпадающие списки, значения которых меняются, а затем я нажимаю кнопку отправки, которая перезагружает сетку. Я использую параметр postData для передачи дополнительных значений в контроллер

  <script type="text/javascript">
    var firstClick = true;
    $(document).ready(function () {
        $("#StartDate").datepicker({
            changeMonth: false,
            changeYear: false
        });
        $("#EndDate").datepicker();

        var updateDialog = {
            url: '<%= Url.Action("UpdateGrid", "TouchSchedule") %>'
            , closeAfterAdd: true
            , closeAfterEdit: true

        };


        $('#btnSubmit').click(function () {
            $("#list").clearGridData();
            if (!firstClick) {
                alert($('#ListFacility').val());
                $("#list").trigger("reloadGrid");


            }
            else {
                firstClick = false;
                /* Refreshes the grid */

                $("#list").jqGrid({
                    url: '<%= Url.Action("GetScheduleInfo", "TouchSchedule") %>',
                    datatype: 'json',
                    mtype: 'GET',
                    postData: { StartDate: $('#StartDate').val(), EndDate: $('#EndDate').val(), siteId: $('#ListFacility') ? $('#ListFacility').val() : -1 },
                    colNames: ['SiteID', 'Cal Date', 'Store Open', 'Start Time', 'End Time', 'MileageLimit AM', 'MileageLimit PM', 'TouchLimit PM', 'TouchLimit AM', 'Total Touches', 'Total Mileage', 'WeekDay'],
                    colModel: [
                { name: 'SiteID', index: 'SiteID', width: 40, align: 'left', /* key: true,*/editable: false, editrules: { edithidden: false }, hidedlg: true, hidden: false },
                { name: 'CalDate', index: 'CalDate', width: 100, align: 'left', formatter: 'date', datefmt: 'm/d/Y', editable: true, edittype: 'text', editrules: { required: true, date: true }, formoptions: { elmsuffix: ' *'} },
                { name: 'StoreOpen', index: 'StoreOpen', width: 40, align: 'left', editable: true, edittype: 'select', formatter: 'select', editrules: { required: true }, formoptions: { elmsuffix: ' *' }, editoptions: { value: { o: 'Open', c: 'closed'}} },
                { name: 'StartTime', index: 'StartTime', width: 100, align: 'left', editable: true, formatter: 'date', masks: 'ShortTime', edittype: 'text', editrules: { time: true, required: true }, formoptions: { elmsuffix: ' *'} },
                { name: 'EndTime', index: 'EndTime', width: 100, align: 'left', editable: true, edittype: 'text', editrules: { time: true, required: true }, formoptions: { elmsuffix: ' *'} },
                { name: 'MileageLimitAM', index: 'MileageLimitAM', width: 50, align: 'left', editable: true, edittype: 'text', editrules: { custom: true, custom_func: CheckMileageLimit, required: true }, formoptions: { elmsuffix: ' *'} },
                { name: 'MileageLimitPM', index: 'MileageLimitPM', width: 50, align: 'left', editable: true, edittype: 'text', editrules: { required: true }, formoptions: { elmsuffix: ' *'} },
                { name: 'TouchLimitAM', index: 'TouchLimitAM', width: 50, align: 'left', editable: true, edittype: 'text', editrules: { required: true }, formoptions: { elmsuffix: ' *'} },
                { name: 'TouchLimitPM', index: 'TouchLimitPM', width: 50, align: 'left', editable: true, edittype: 'text', editrules: { required: true }, formoptions: { elmsuffix: ' *'} },
                { name: 'TotalTouches', index: 'TotalTouches', width: 50, align: 'left', editable: true, edittype: 'text', editrules: { required: true }, formoptions: { elmsuffix: ' *'} },
                { name: 'TotalMileage', index: 'TotalMileage', width: 50, align: 'left', editable: true, edittype: 'text', editrules: { required: true }, formoptions: { elmsuffix: ' *'} },
                 { name: 'WeekDay', index: 'WeekDay', width: 200, align: 'left', editable: false, hidden: false}],

                    pager: $('#listPager'),
                    rowNum: 10,
                    rowList: [10, 20, 30],
                    sortname: 'CalDate',
                    sortorder: "desc",
                    viewrecords: true,
                    caption: 'Schedule Calendar',
                    autowidth: false,
                    afterInsertRow: function (rowid, rowdata) {
                        if (rowdata.IsWeekend)
                            $(this).jqGrid('setRowData', rowid, false, { color: 'blue' });
                    }


                }).navGrid('#listPager',
            {
                edit: true, add: false, del: false, search: false, refresh: true
            }

        );
            }

        });



    });

    function CheckMileageLimit(value, colname)
     {
        alert($("#TotalMileage").val());
        if (value > $("#TotalMileage").val())
         {
            alert(false);
            return ["false", "value shuld be less"];
          }
        else
         {
            alert(true);
            return ["true",""];}
          }
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...