Прежде всего, в отношении параметра 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;
}