jqGrid - динамическое добавление строк через Json - PullRequest
1 голос
/ 17 марта 2011

Я пытаюсь динамически добавлять строки в мой jqGrid в зависимости от значения, которое пользователь ввел в текстовое поле.Есть метод, который выбирает Json-запрос с сервера, но у меня возникают проблемы с его получением для добавления фактических данных.

Вот код jqGrid :

function RenderGrid(grid) {
$("#queryGrid").jqGrid({
    datatype: grid.DataType,
    mtype: grid.RequestType,
    colNames: grid.ColumnNames,
    colModel: grid.ColumnModel,
    pager: $('#pager'),
    rowNum: grid.MaxViewableRows,
    caption: "Search",
    width: grid.Width,
    rowList: grid.MaxViewableRowOptions,
    height: grid.Height,
    loadtext: "Please wait...",
    viewrecords: grid.ShowTotalRecords,
    hidegrid: grid.HideEnabled,
    forceFit: true
})

Я не установил опцию URL, потому что, как я упоминал ранее, данные поступают из других источников.Однако это colModel :

{"name":"id","index":"id","hidden":"true"},
{"name":"Customer","index":"Customer","sorttype":"Int32","editable":false,"width":216,"resizable":true},
{"name":"ShortName","index":"ShortName","sorttype":"String","editable":false,"width":216,"resizable":true},
{"name":"CorrespondenceName","index":"CorrespondenceName","sorttype":"String","editable":false,"width":216,"resizable":true}

Вот код , который получает JSON :

function SearchGrid() {
    $.ajax({
        url: $.url("/MyController/MyAction"),
        type: "POST",
        dataType: "json",
        data: {
            Name: $('#Name').val(),
            Fields: $('#Fields').text(),
        },
        success: ApplyDataToGrid //More on this later in the question
    });
}

Как все это работает на первый взглядхорошо.Я не думаю, что проблема с любым из приведенного выше кода.Вот где он становится хитрым, вот где я получаю объект JSON и когда я пытаюсь добавить его в сетку.

Это JSON, который я получаю :

{"page":1,"records":1,"rows":[{"id":1,"cell":[94,"DAMIEN","IS AN IDIOT"]}],"total":1}

Это код , который я использую для (попытки) для добавления данных в сетку :

function ApplyDataToGrid(data) {
    $("#queryGrid")[0].addJSONData(data, $("#queryGrid").bDiv, 0)   
}

или

function ApplyDataToGrid(data) {
    $("#queryGrid")[0].addJSONData(data)   
}

Это делает применяет количество страниц и количество записей, но не отображает строку, которая должна добавить идентификатор и три столбца!

Любойидея?Это сводит меня с ума!Заранее спасибо, Дэмиен

Ответы [ 2 ]

2 голосов
/ 17 марта 2011

Поскольку вы вызываете контроллер MVC для получения данных JSON, я бы посоветовал вам сделать то, что Олег предложил мне здесь .Вы можете предварительно загрузить пустой jqGrid, а затем, когда пользователь нажимает кнопку или изменяет текст в текстовом поле, вы можете запустить перезагрузку сетки: myGrid.trigger('reloadGrid',[{page:1}]);

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

postData: {
            Param1: function() { return $("#Filter1").val(); },
            Param2: function() { return $("#Filter2").val(); }
        }, 

Если вы используете ASP.NET MVC 2 или 3 и вы размещаете свои данные, ваше действие будет выглядеть примерно так:

  [HttpPost]
    public JsonResult SuccesMsg()
    {
        return Json(yourdata, JsonRequestBehavior.DenyGet);
    }
1 голос
/ 17 марта 2011

Непонятно, какой сценарий у вас есть, потому что вы хотите добавить данные в таблицу и, кроме того, хотите иметь правильное количество страниц и количество записей. jqGrid поддерживает множество настроек. Какие именно настройки вы используете в тестовой сетке, у которых есть проблемы. Например, код datatype: grid.DataType слишком общий. Было бы очень полезно, если бы вы включили значения всех параметров jqGrid, которые вы используете в тесте, которые не работают.

Настройки sorttype":"String" и "sorttype":"Int32" абсолютно неверны. Возможно, вы имеете в виду sorttype:"int" и значение по умолчанию sorttype:"text".

Возможно, вы можете лучше заполнить сетку параметром data, который содержит полные данные сетки. Если вам действительно нужно добавить данные в существующую сетку, не создавая ее заново, вы можете использовать addRowData , которая работает со всеми типами данных. Это позволяет, кстати, добавить массив данных в сетку за один вызов addRowData .

Еще один вопрос: ваша сетка имеет 4 столбца, и вы включаете значения только для трех столбцов: [94, «DAMIEN», «IS AN IDIOT»]. Мне кажется странным Возможно, вы хотите использовать ["1", "94", "DAMIEN", "IS IDIOT"]? Если вы включите «key: true» в столбец «id» и включите jsonReader:{cell:""}, то элемент данных JSON можно изменить с

{"id":1,"cell":["1","94","DAMIEN","IS AN IDIOT"]}

до

["1","94","DAMIEN","IS AN IDIOT"]

(см. здесь ).

Будет намного проще, если вы подготовите пример без grid.DataType. Только после того, как он будет работать хорошо, вы можете сделать его более динамичным.

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