jQGrid celledit в данных JSON показывает URL Не установлено предупреждение

0

Мне нужно загрузить JSON с сервера, и я хочу, чтобы пользователь мог щелкнуть и отредактировать значение.

Но когда они редактируют, он не должен вызывать сервер. Я имею в виду, что я не собираюсь обновляться немедленно. Так что я не хочу editurl. Так что я попробовал 'ClientArray' Но все же он показывает, что Url не установлен в поле предупреждения. Но мне нужно все отредактированные значения, когда пользователь нажимает кнопку "Добавить комментарии" , эта кнопка загорается AddSelectedItemsToSummary(), чтобы сохранить их на сервере

MVC HTML Script

<div>
<table id="persons-summary-grid"></table>
<input type="hidden" id="hdn-deptsk" value="2"/>
<button id="AddSelectedItems" onclick="AddSelectedItemsToSummary();" />
</div>


$(document).ready(function(){
   showSummaryGrid(); //When the page loads it loads the persons for Dept
});

Данные JSON

    {"total":2,"page":1,"records":2,
     "rows":[{"PersonSK":1,"Type":"Contract","Attribute":"Organization
           Activity","Comment":"Good and helping og"},
          {"PersonSK":2,"Type":"Permanant","Attribute":"Team Management",
          "Comment":"Need to improve leadership skill"}
    ]}

Код jQGRID

var localSummaryArray;

function showSummaryGrid(){

 var summaryGrid = $("#persons-summary-grid");

 // doing this because it is not firing second time using .trigger('reloadGrid')
 summaryGrid.jqGrid('GridUnload'); 
 var deptSk = $('#hdn-deptsk').val();
 summaryGrid.jqGrid({
 url: '/dept/GetPersonSummary',
 datatype: "json",
 mtype: "POST",
 postData: { deptSK: deptSk },
 colNames: [
            'SK', 'Type', 'Field Name', 'Comments'],
colModel: [
           { name: 'PersonSK', index: 'PersonSK', hidden: true },
           { name: 'Type', index: 'Type', width: 100 },

           { name: 'Attribute', index: 'Attribute', width: 150 },
           { name: 'Comment', index: 'Comment', editable: true, 
                    edittype: 'textarea',  width: 200 }
         ],

cellEdit: true,
cellsubmit: 'clientArray',
editurl: 'clientArray',
rowNum: 1000,
rowList: [],        
pgbuttons: false,     
pgtext: null,         
viewrecords: false,    
emptyrecords: "No records to view",
gridview: true,
caption: 'dept person Summary',
height: '250',

jsonReader: {
    repeatitems: false

},
loadComplete: function (data) {

        localSummaryArray= data;
        summaryGrid.setGridParam({ datatype: 'local' });
        summaryGrid.setGridParam({ data: localSummaryArray});
    }

});
)

Функция нажатия кнопки

function AddSelectedItemsToSummary() {

 //get all the items that has comments 
 //entered using cell edit and save only those.
 // I need to prepare the array of items and send it to MVC controller method
 // Also need to reload summary grid

}

Может ли кто-нибудь помочь в этом? почему я получаю этот URL-адрес не установленной ошибкой?

EDIT:

Этот код работает после loadComplete изменений. Прежде чем он показывал Предупреждение о настройке URL

Теги:
jqgrid

1 ответ

1
Лучший ответ

Я не понимаю проблему редактирования ячейки, которую вы описываете. Кроме того, вы написали "Мне нужно отредактированное значение, когда пользователь нажимает + значок в строке". Где значок "+"? Вы имеете в виду значок "trash.gif" ? Если вы хотите использовать редактирование ячеек, как вы это себе представляете при нажатии на значок в строке? Какую ячейку следует начать редактировать при нажатии на значок "trash.gif" ? Вы можете начать редактирование какой-либо другой ячейки, поскольку ячейка с иконкой "trash.gif" is editCell, но я не думаю, что она быть удобным для пользователя, потому что для пользователей точки зрения он начнет редактирование одной ячейки при нажатии другой ячейки. Мне кажется, мне неудобно. Возможно, вы хотите реализовать встроенное редактирование?

Одна явная ошибка в вашем коде - использование showSummaryGrid внутри RemoveFromSummary. Функция RemoveFromSummary создает jqGrid, а не просто заполняет ее. Поэтому его следует называть только один раз. Чтобы обновить тело сетки, вы должны вызвать $("#persons-summary-grid").trigger("refreshGrid");. Вместо использования postData: { deptSK: deptSk } вы должны использовать

postData: { deptSK: function () { return $('#hdn-deptsk').val(); } }

В случае, если запуск refreshGrid будет достаточно, и он отправит серверу текущее значение из '#hdn-deptsk'. Подробнее см. .

ОБНОВЛЕНО. Я не смог воспроизвести проблему, которую вы описали, но я подготовил демо, которые делают что вам нужно (если я правильно понимаю ваши требования). Самая важная часть кода, который вам, вероятно, вам нужен, находится ниже

$("#AddSelectedItems").click(function () {
    var savedRow = summaryGrid.jqGrid("getGridParam", "savedRow"),
        $editedRows,
        modifications = [];
    if (savedRow && savedRow.length > 0) {
        // save currently editing row if any exist
        summaryGrid.jqGrid("saveCell", savedRow[0].id, savedRow[0].ic);
    }
    // now we find all rows where cells are edited
    summaryGrid.find("tr.jqgrow:has(td.dirty-cell)").each(function () {
        var id = this.id;
        modifications.push({
            PersonSK: id,
            Comment: $(summaryGrid[0].rows[id].cells[2]).text() // 2 - column name of the column "Comment"
        });
    });
    // here you can send modifications per ajax to the server and call
    // reloadGrid inside of success callback of the ajax call
    // we simulate it by usage alert
    alert(JSON.stringify(modifications));
    summaryGrid.jqGrid("setGridParam", {datatype: "json"}).trigger("reloadGrid");
});
  • 0
    Большое спасибо. Это полезно Я следил за тобой демо ok-soft-gmbh.com/jqGrid/SaveRow.htm . Мне также нужно реализовать Celledit для одного поля. Но сетка была заполнена с использованием типа данных: JSON и URL-адреса сервера. После загрузки я хочу отредактировать поле и сохранить изменения локально.
  • 0
    Мне удалось использовать событие loadComplete и изменил grid.setGridParam ({datatype: 'local'}) и grid..setGridParam ({data: localDataStoredArray}); и использовал cellEdit: true, cellubmit: 'clientArray',
Показать ещё 12 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню