Как реализовать поиск по jqgrid? - PullRequest
29 голосов
/ 13 января 2009

Итак, у меня есть базовый пример работы jqgrid в ASP.NET MVC, javascript выглядит так:

    $(document).ready(function() {

        $("#list").jqGrid({
            url: '../../Home/Example',
            datatype: 'json',
            myType: 'GET',
            colNames: ['Id', 'Action', 'Parameters'],
            colModel: [
                   { name: 'id', index: 'id', width: 55, resizable: true },
                   { name: 'action', index: 'action', width: 90, resizable: true },
                   { name: 'paramters', index: 'parameters', width: 120, resizable: true}],
            pager: $('#pager'),
            rowNum: 10,
            rowList: [10, 20, 30],
            sortname: 'id',
            sortorder: 'desc',
            viewrecords: true,
            multikey: "ctrlKey",
            imgpath: '../../themes/basic/images',
            caption: 'Messages'
        });

Теперь я пытаюсь реализовать кнопку поиска, которую они имеют в jqgrid примерах (нажмите на Манипулирование / Сетка данных). Но я не вижу, как они это реализуют. Я ожидаю, например, «поиск: истина» и метод для его реализации.

Кто-нибудь реализовал поиск по jqgrid или знает примеры, которые явно показывают, как это сделать?

Ответы [ 5 ]

40 голосов
/ 17 апреля 2009

Я недавно реализовал это сам (вчера фактически) впервые. Самым большим препятствием для меня было выяснить, как написать функцию контроллера. Подпись функции - вот что мне потребовалось больше всего времени (обратите внимание на параметры _search, searchField, searchOper и searchString, поскольку они отсутствуют в большинстве примеров asp.net mvc, которые я видел). Javascript отправляет сообщения в контроллер как для начальной загрузки, так и для поискового вызова. В коде вы увидите, что я проверяю, является ли параметр _search истинным или нет.

Ниже приведен контроллер и код JavaScript. Приношу свои извинения за любые проблемы с форматированием, так как я впервые публикую здесь.

public ActionResult GetAppGroups(string sidx, string sord, int page, int rows, bool _search, string searchField, string searchOper, string searchString)
{
    List<AppGroup> groups = service.GetAppGroups();
    List<AppGroup> results;
    if (_search)
       results = groups.Where(x => x.Name.Contains(searchString)).ToList();
    else
       results = groups.Skip(page * rows).Take(rows).ToList();

    int i = 1;

    var jsonData = new
    {
        total = groups.Count / 20,
        page = page,
        records = groups.Count,
        rows = (
            from appgroup in results
            select new
            {
                i = i++,
                cell = new string[] {
                         appgroup.Name,
                         appgroup.Description
                     }
            }).ToArray()
    };

    return Json(jsonData);
}

А вот мой HTML / Javascript:

$(document).ready(function() {
  $("#listGroups").jqGrid({
    url: '<%= ResolveUrl("~/JSON/GetAppGroups/") %>',
    datatype: 'json',
    mtype: 'GET',
    caption: 'App Groups',
    colNames: ['Name', 'Description'],
    colModel: [
        { name: 'Name', index: 'Name', width: 250, resizable: true, editable: false},
        { name: 'Description', index: 'Description', width: 650, resizable: true, editable: false},
    ],
    loadtext: 'Loading Unix App Groups...',
    multiselect: true,
    pager: $("#pager"),
    rowNum: 10,
    rowList: [5,10,20,50],
    sortname: 'ID',
    sortorder: 'desc',
    viewrecords: true,
    imgpath: '../scripts/jqgrid/themes/basic/images'
//});
}).navGrid('#pager', {search:true, edit: false, add:false, del:false, searchtext:"Search"});
19 голосов
/ 19 февраля 2010

См. Мою статью о codeproject, которая объясняет, как мы можем выполнять множественный поиск в jqgrid:

Использование панели инструментов поиска jqGrid с несколькими фильтрами в ASP.NET MVC

Я использую IModelBinder для привязки настроек сетки, деревья выражений для сортировки и фильтрации данных.

2 голосов
/ 12 июня 2009

Если вам все еще интересно разобраться с необязательными параметрами, просто объявите их как обнуляемые, добавив ? после имени типа.

Теперь вы сможете сравнить их с null, чтобы проверить, отсутствуют ли они.

Обратите внимание, что вам не нужно делать это со строками, так как они уже обнуляются.

0 голосов
/ 17 апреля 2009

@ Алан - хорошо, я использовал ваш метод и расширил свой веб-сервис, ожидая, что эти три дополнительных параметра и проверка «_search» имеет значение true / false. Но чтобы сделать это, мне нужно было добавить это к моему вызову ajax в JavaScript:

if (!postdata._search) {    
           jQuery("#mygrid").appendPostData( {searchField:'', searchOper:'', searchString:''});  
}
0 голосов
/ 17 марта 2009

Просто следуйте по этой ссылке . Это все объяснения реализации ...

Вы можете создать кнопку searchBtn и вызывать поисковую форму при нажатии

$("#searchBtn").click(function(){
   jQuery("#list4").searchGrid(
   {options}
    )});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...