JQGrid Установка идентификатора новой добавленной строки в Grid - PullRequest
0 голосов
/ 03 февраля 2012
 jQuery.extend(
jQuery.jgrid.edit, {
    ajaxEditOptions: { contentType: "application/json" }, //form editor
    reloadAfterSubmit: true
//        afterSubmit: function (response, postdata) {
//    return [true, "", $.parseJSON(response.responseText).d];
//}
});

$.extend($.jgrid.defaults, {
    datatype: 'json',
    ajaxGridOptions: { contentType: "application/json" },
    ajaxRowOptions: { contentType: "application/json", type: "POST" },
               //row              inline     editing
    serializeGridData: function(postData) { return JSON.stringify(postData); },
    jsonReader: {
        repeatitems: false,
        id: "0",
        cell: "",
        root: function(obj) { return obj.d.rows; },
        page: function(obj) { return obj.d.page; },
        total: function(obj) { return obj.d.total; },
        records: function(obj) { return obj.d.records; }
    }

});


 $("#grantlist").jqGrid({
            url: 'webservice.asmx/GetGrant',
            colNames: ['ID', 'Name', 'Title'],
            colModel: [
            { name: 'ID', width: 60, sortable: false },
            { name: 'name', width: 210, editable: true },
            { name: 'title', width: 210, editable: true }
            ],
            serializeRowData: function(data) {
                var params = new Object();
                params.ID = 0;
                params.name = data.name;
                params.title = data.title;
                return JSON.stringify({ 'passformvalue': params, 'oper': data.oper, 'id': data.id });
            },
            mtype: "POST",
            sortname: 'ID',
            rowNum: 4,
            height: 80,
            pager: '#pager',
            editurl: "webservice.asmx/ModifyGrant"
        });
        $("#grantlist").jqGrid('navGrid', '#pager', { add: false, edit: false, del: false, refresh: false, search: false });
        $("#grantlist").jqGrid('inlineNav', '#pager');

//this is my server code
[WebMethod(EnableSession = true)]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public JQGrid<GrantComittee> GetGrantComittee(int? page, int? rows, string sidx, string sord, bool _search)
    {
        JQGrid<GrantComittee> jqgrid = new JQGrid<GrantComittee>();

        List<GrantComittee> data = GetGComittee();
        jqgrid.records = data.Count; //total row count
        jqgrid.total = (int)Math.Ceiling((double)data.Count / (double)rows); //number of pages
        jqgrid.page = page.Value;

        //paging
        data = data.Skip(page.Value * rows.Value - rows.Value).Take(rows.Value).ToList();
        foreach(GrantComittee i in data)
            jqgrid.rows.Add(i);


        return jqgrid;


    }

[WebMethod(EnableSession = true), ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public int ModifyGrantComittee(GrantComittee passformvalue, string oper, string id)
    {
        if (String.Compare(id, "_empty", StringComparison.Ordinal) == 0 ||
            String.Compare(oper, "add", StringComparison.Ordinal) == 0)
        {

            GrantComittee data = new GrantComittee();
            List<GrantComittee> set = new List<GrantComittee>();
            set = (List<GrantComittee>)Session["grantcomittee"];
            data = passformvalue;
            data.ID = set.Max(p => p.ID) + 1;
            set.Add(data);
            Session["grantcomittee"] = set;
            return data.ID; 
        }
        else if (String.Compare(oper, "edit", StringComparison.Ordinal) == 0)
        {
            // TODO: modify the data identified by the id
            return 0;
        }
        else if (String.Compare(oper, "del", StringComparison.Ordinal) == 0)
        {
            // TODO: delete the data identified by the id 
            return 0;
        }
        return 0;
    } 

Я использую JqGrid для извлечения и добавления новых записей в базу данных.До сих пор я был в состоянии получить и добавить новые элементы в БД, я использую "JSON".Я получаю ответ {"d": "5"} для идентификатора вновь созданной строки в БД.Однако новый идентификатор не отображается в сетке.Как я могу обновить это значение для новой добавленной строки?

Ответы [ 2 ]

4 голосов
/ 03 февраля 2012

В большинстве случаев вам не нужно ничего делать из-за настройки по умолчанию reloadAfterSubmit: true .Это означает, что полная сетка будет перезагружена с сервера после того, как пользователь добавит новую строку или изменит существующую.

Если вы хотите использовать параметр reloadAfterSubmit: false , и сервер вернет *Необходимо создать 1007 * новой созданной строки в ответе afterSubmit функцию обратного вызова, которая декодирует ответ сервера и возвращает его для использования функцией jqGrid.Соответствующий код может быть примерно следующим:

afterSubmit: function (response, postdata) {
    return [true, "", $.parseJSON(response.responseText).d];
}

Вы можете определить обратный вызов, переписав параметры по умолчанию $.jgrid.edit (см. здесь и здесь ).

0 голосов
/ 10 февраля 2012

Я использую «inlinNav» и после добавления новой строки я не получаю перезагрузку сетки.Решение, которое я нашел, состояло в том, чтобы добавить параметры в объявление inlineNav.В итоге я получаю код, который я предоставляю в качестве ссылки:

$("#grantlist").jqGrid('inlineNav', '#pager', { addParams: { position: "last", addRowParams: {
            "keys": true, "aftersavefunc": function() { var grid = $("#grantlist"); reloadgrid(grid); }
        }
        }, editParams: { "aftersavefunc": function() { var grid = $("#grantlist"); reloadgrid(grid); } }
        });    
function reloadgrid(grid) {
grid.trigger("reloadGrid");

}

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

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