Добавить собственный параметр поиска в jqGrid в Asp.net MVC - PullRequest
3 голосов
/ 20 апреля 2010

Я только начал работать над asp.net mvc и jqgrid.

У меня есть календарь, который возвращает дату, окно списка с несколькими выборками и кнопка применения фильтра вне сетки. Есть ли способ передать эти значения фильтра в результат действия на стороне сервера GridData (), основанный на выбранной дате и нескольких выбранных значениях, а также он сохраняется во время подкачки или сортировки.

public ActionResult GridData (строка sidx, строка sord, int? Страница, int? Строки, коллекция categoryOptions, строка fromDate) {..}

Спасибо!

Ответы [ 2 ]

5 голосов
/ 21 апреля 2010

Да, вы можете использовать свойство postData для отправки дополнительных параметров фильтра с каждым запросом. Обратите внимание, что это будет работать, только если вы используете JSON для заполнения своей сетки. Просто есть действие, которое возвращает JsonResult.

В вашей конфигурации jqgrid есть:

postData: {
   startDate: function() { return $('#startDate').val(); },
   anotherFilter: function() { return $('#anotherFilter').val(); }
}

Для применения фильтра нажмите кнопку $ ('# GridName'). Trigger ('reloadGrid'). В качестве альтернативы мне нравится обновлять сетку каждый раз, когда меняется фильтр. Вы можете сделать это с помощью jquery:

$('#filterName').change(function(){$('#GridName').trigger('reloadGrid');})

Ваш JSON должен содержать эти свойства для понимания jqgrid:

total = pagedList.PageCount,
page = pagedList.PageNumber,
records = pagedList.TotalItemCount,
rows = pagedList.ToArray()
1 голос
/ 21 апреля 2010

Прежде всего, в отношении параметра postData (см. http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options), вы можете отправить дополнительную информацию на сервер. В Следует ли заменить использование addJSONData из jqGrid на использование setGridParam () и trigger ( 'reloadGrid')? вы также можете найти некоторую информацию, которая может помочь вам обновить данные в jqGrid.

Мне кажется, что, вероятно, вместо пользовательской фильтрации вне jqGrid вам может помочь стандартная фильтрация (поиск) данных. Я использую микс из пользовательской фильтрации на некоторых веб-страницах и использую «расширенный поиск» (см. http://www.trirand.com/jqgridwiki/doku.php?id=wiki:advanced_searching) почти везде. «Расширенный поиск» - это способ дать вам интерфейс для поиска по нескольким полям одновременно с различными условиями .

Ваш URL будет добавлен:

? _ Поиск = {_ поиска} и страница = {страница} и строк = {строки} & sidx = {sortIndex} & Sord = {SortDirection} & searchField = {searchField} & SearchString = {SearchString} & searchOper = {searchOper} и фильтры = {фильтры}

и вы должны обновить свою функцию-прототип корреспондента. Информация от filters - это упакованный в JSON объект, такой как

filters = 
    {"groupOp":"AND",
     "rules":[
       {"field":"invdate","op":"ge","data":"2007-10-06"},
       {"field":"invdate","op":"le","data":"2007-10-20"}, 
       {"field":"name","op":"bw","data":"Client 3"}
      ]
    }

Для анализа информации из фильтра я лично использую DataContractJsonSerializer. Фрагмент кода:

MemoryStream ms = new MemoryStream (Encoding.Unicode.GetBytes (filters));
DataContractJsonSerializer serializer = new DataContractJsonSerializer (typeof(jqGridSearchFilter));
ms.Position = 0;

jqGridSearchFilter searchFilter = (jqGridSearchFilter)serializer.ReadObject (ms);
string groupOp = null;
if (!String.IsNullOrEmpty(searchFilter.groupOp) &&
    String.Compare (searchFilter.groupOp, "AND", StringComparison.Ordinal) == 0)
    groupOp = "AND";
else if (!String.IsNullOrEmpty(searchFilter.groupOp) &&
         String.Compare (searchFilter.groupOp, "OR", StringComparison.Ordinal) == 0)
    groupOp = "OR";
else {
    arSearchStringParameters = null;
    return null;
}
for (int i=0; i "WHERE ".Length)
        sb.Append (groupOp);
    AppendWhere (sb, _search,
        searchFilter.rules[i].field, searchFilter.rules[i].op, searchFilter.rules[i].data,
        arColumnInfos, parameters);
}

, где

internal enum GroupOperation {
    AND,
    OR
}

[DataContract]
internal class jqGridSearchFilterItem {
    [DataMember]
    internal string field = null;
    [DataMember]
    internal string op = null;
    [DataMember]
    internal string data = null;
}

[DataContract]
internal class jqGridSearchFilter {
    [DataMember]
    internal string groupOp = null; //GroupOperation groupOp;

    [DataMember]
    internal List rules = null;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...