فعال سازی و پردازش جستجوی پویای jqGrid در ASP.NET MVC
نویسنده: وحید نصیری
تاریخ: ۱۳۹۳/۰۴/۱۳ ۸:۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
colModel: [
{
name: 'Name', index: 'Name', align: 'right', width: 200,
search: true, stype: 'text', searchoptions: { sopt: searchOptions }
},
{
name: 'Supplier.Id', index: 'Supplier.Id', align: 'right', width: 200,
search: true, stype: 'select', edittype: 'select', searchOperators: true,
searchoptions:
{
sopt: searchOptions, dataUrl: '@Url.Action("SuppliersSelect","Home")'
}
}
], var searchOptions = ['eq', 'ne', 'lt', 'le', 'gt', 'ge', 'bw', 'bn', 'in', 'ni', 'ew', 'en', 'cn', 'nc'];
public ActionResult SuppliersSelect()
{
var list = ProductDataSource.LatestProducts;
var suppliers = list.Select(x => new SelectListItem
{
Text = x.Supplier.CompanyName,
Value = x.Supplier.Id.ToString(CultureInfo.InvariantCulture)
}).ToList();
return PartialView("_SelectPartial", suppliers);
} @model IList<SelectListItem>
@Html.DropDownList("srch", Model)
$(document).ready(function () {
$('#list').jqGrid({
// ... مانند قبل و توضیحات فوق
})
.jqGrid('navGrid', '#pager',
{ add: false, edit: false, del: false },
{}, // default settings for edit
{}, // default settings for add
{}, // delete instead that del:false we need this
{
// search options
multipleSearch: true,
closeOnEscape: true,
closeAfterSearch: true,
ignoreCase: true
})
.jqGrid('navButtonAdd', "#pager", {
caption: "نوار ابزار جستجو", title: "Search Toolbar", buttonicon: 'ui-icon-search',
onClickButton: function () {
toolbarSearching();
}
});
});
function toolbarSearching() {
$('#list').filterToolbar({
groupOp: 'OR',
defaultSearch: "cn",
autosearch: true,
searchOnEnter: true,
searchOperators: true, // فعال سازی منوی اپراتورها
stringResult : true // وجود این سطر سبب میشود تا اپراتورها به سرور ارسال شوند
});
};
function singleSearching() {
$('#list').searchGrid({
closeAfterSearch: true
});
};
function advancedSearching() {
$('#list').searchGrid({
multipleSearch: true,
closeAfterSearch: true
});
};
/* align center search popup in jqgrid */
.ui-jqdialog {
display: none;
width: 300px;
position: absolute;
padding: .2em;
font-size: 11px;
overflow: visible;
left: 30% !important;
top: 40% !important;
} //single field search
//_search=true&nd=1403935889318&rows=10&page=1&sidx=Id&sord=asc&searchField=Id&searchString=4444&searchOper=eq&filters=
//multi-field search
//_search=true&nd=1403935941367&rows=10&page=1&sidx=Id&sord=asc&filters=%7B%22groupOp%22%3A%22AND%22%2C%22rules%22%3A%5B%7B%22field%22%3A%22Id%22%2C%22op%22%3A%22eq%22%2C%22data%22%3A%2244%22%7D%2C%7B%22field%22%3A%22SupplierID%22%2C%22op%22%3A%22eq%22%2C%22data%22%3A%221%22%7D%5D%7D&searchField=&searchString=&searchOper=
// filters -> {"groupOp":"AND","rules":[{"field":"All","op":"cn","data":"fffff"},{"field":"Price","op":"bn","data":"ffff"}]}
//toolbar search
//_search=true&nd=1403935593036&rows=10&page=1&sidx=Id&sord=asc&Id=2&Name=333&SupplierID=1&CategoryID=1&Price=44 { "groupOp": "AND",
"groups" : [
{ "groupOp": "OR",
"rules": [
{ "field": "name", "op": "eq", "data": "England" },
{ "field": "id", "op": "le", "data": "5"}
]
}
],
"rules": [
{ "field": "name", "op": "eq", "data": "Romania" },
{ "field": "id", "op": "le", "data": "1"}
]
} public class SearchFilter
{
public string groupOp { set; get; }
public List<SearchGroup> groups { set; get; }
public List<SearchRule> rules { set; get; }
}
public class SearchRule
{
public string field { set; get; }
public string op { set; get; }
public string data { set; get; }
public override string ToString()
{
return string.Format("'{0}' {1} '{2}'", field, op, data);
}
}
public class SearchGroup
{
public string groupOp { set; get; }
public List<SearchRule> rules { set; get; }
} public IQueryable<T> ApplyFilter<T>(IQueryable<T> query, bool _search, string searchField, string searchString, string searchOper, string filters, NameValueCollection form)
[HttpPost]
public ActionResult GetProducts(string sidx, string sord, int page, int rows,
bool _search, string searchField, string searchString,
string searchOper, string filters)
{
var list = ProductDataSource.LatestProducts;
var pageIndex = page - 1;
var pageSize = rows;
var totalRecords = list.Count;
var totalPages = (int)Math.Ceiling(totalRecords / (float)pageSize);
var productsQuery = list.AsQueryable();
productsQuery = new JqGridSearch().ApplyFilter(productsQuery, _search, searchField, searchString,
searchOper, filters, this.Request.Form);
var productsList = productsQuery.OrderBy(sidx + " " + sord)
.Skip(pageIndex * pageSize)
.Take(pageSize)
.ToList();
var productsData = new JqGridData
{
Total = totalPages,
Page = page,
Records = totalRecords,
Rows = (productsList.Select(product => new JqGridRowData
{
Id = product.Id,
RowCells = new List<string>
{
product.Id.ToString(CultureInfo.InvariantCulture),
product.Name,
product.Supplier.CompanyName,
product.Category.Name,
product.Price.ToString(CultureInfo.InvariantCulture)
}
})).ToArray()
};
return Json(productsData, JsonRequestBehavior.AllowGet);
} $('#list').jqGrid({
//url access method type
mtype: 'POST', productsQuery = new JqGridSearch().ApplyFilter(productsQuery, _search, searchField, searchString, searchOper, filters, this.Request.Form);
<button onclick="$('#list')[0].toggleToolbar()">نمایش/حذف تولبار</button> .jqGrid('navButtonAdd', "#pager", {
caption: "نوار ابزار جستجو", title: "Search Toolbar", buttonicon: 'ui-icon-search',
onClickButton: function () {
toolbarSearching();
$('#list')[0].toggleToolbar();
}
}); $("#list").jqGrid({
//...
}).filterToolbar(options); $("#list").jqGrid({
//...
}).jqGrid('filterToolbar', { stringResult: true, searchOnEnter: true, autosearch: true, searchOperators: true, groupOp: 'OR', defaultSearch: 'cn' })
.jqGrid('navButtonAdd', "#pager", {
caption: "نوار ابزار جستجو", title: "Search Toolbar", buttonicon: 'ui-icon-search',
onClickButton: function () {
$("#list")[0].toggleToolbar();
}
});
$("#list")[0].toggleToolbar(); public ActionResult SuppliersSelect()
{
var list = BlNews.Select().Distinct().ToList();
var suppliers = list.Select(x => new SelectListItem
{
Text = x.Admin.UserName,
Value = x.Admin.Code.ToString(CultureInfo.InvariantCulture)
}).ToList();
return PartialView("_SelectPartial", suppliers);
} Expression ParseMemberAccess(Type type, Expression instance) Expression of type 'System.Guid' cannot be used for parameter of type 'System.Object' of method 'Boolean Equals(System.Object)'
foreach (var rule in filtersArray.rules)
{
var predicate = getPredicate<T>(rule.field, rule.op, rule.data);
if (predicate == null)
continue;
valuesList.Add(predicate.Item2);
filterExpression = string.Format("{0}{1} {2} ", filterExpression, predicate.Item1, groupOperator);
} {
"groupOp":"OR",
"rules":[{"field":"a.id","op":"eq","data":"1"}],
"groups":[
{
"groupOp":"AND",
"rules":[{"field":"a.id","op":"eq","data":"2"}],
"groups":[...]
}
]
} return !string.IsNullOrWhiteSpace(_request.filters) ?
manageMultiFieldSearch(query) : manageToolbarSearch(query);
{
name: "shopTitle", align: 'center', viewable: true, editrules: { edithidden: true },
search: true,
editable: true, stype: 'select',
edittype: 'select',
searchoptions: {
sopt: ["eq", "ne"],
dataUrl: "/manager/Products/Getshop/", buildSelect: function (data) {
var response, s = '<select>', i;
response = jQuery.parseJSON(data);
if (response && response.length) {
$.each(response, function (i) {
s += '<option value="' + this.shId + '">' + this.shTitle + '</option>';
});
}
return s + '</select>';
},
}, public ActionResult Getshop()
{
var shops = (from sh in db.Shops.ToList()
select new { shId = sh.Id, shTitle = sh.Title }).Distinct();
return Json(shops.ToList(), JsonRequestBehavior.AllowGet);
}
{
width: 100, name: "OrderStatus",search: true, stype: 'select',
searchoptions: {
value: "@Repository.GetStatus()",
}
} public static string GetStatus()
{
string s = ":همه موارد;";
var list2 = Enum.GetValues(typeof(OrderStatus)).Cast<OrderStatus>().ToList();
foreach (var item in list2)
{
s += item + ":" + GetDisplayName(item) + ";";
}
return s.Remove(s.Length - 1);
}
public static string GetDisplayName(OrderStatus enumValue)
{
return enumValue.GetType()
.GetMember(enumValue.ToString())
.First()
.GetCustomAttribute<DisplayAttribute>()
.GetName();
}