Entity framework Asp.NETMVC2-jqgrid多搜索示例
我正在用MVC2和实体框架实现jqGrid。我想利用它的多种搜索功能,结合分页/排序以及CRUD交互。网格将由两个表组成,因此搜索功能也需要能够搜索相关表。我目前拥有分页/排序功能,客户端返回控制器端所需的所有搜索过滤器。我正在寻找一个示例,说明如何在实体框架上实现所有不同的搜索操作符,同时仍然支持分页/排序和相关的表搜索 我当前的客户端脚本:Entity framework Asp.NETMVC2-jqgrid多搜索示例,entity-framework,asp.net-mvc-2,jqgrid,Entity Framework,Asp.net Mvc 2,Jqgrid,我正在用MVC2和实体框架实现jqGrid。我想利用它的多种搜索功能,结合分页/排序以及CRUD交互。网格将由两个表组成,因此搜索功能也需要能够搜索相关表。我目前拥有分页/排序功能,客户端返回控制器端所需的所有搜索过滤器。我正在寻找一个示例,说明如何在实体框架上实现所有不同的搜索操作符,同时仍然支持分页/排序和相关的表搜索 我当前的客户端脚本: $(document).ready(function () { $('#grid').jqGrid({ colNames: ['
$(document).ready(function () {
$('#grid').jqGrid({
colNames: ['TypeId', 'Type', 'CR Active', 'Category'],
colModel: [
{ name: 'TYPE_ID', index: 'TYPE_ID', hidden: true, search: false },
{ name: 'TYPE', index: 'TYPE', sortable: true, hidden: false },
{ name: 'CR_ACTIVE', index: 'CR_ACTIVE', align: 'right', sortable: true, hidden: false },
{ name: 'description', index: 'description', align: 'right', sortable: true, hidden: false }
],
pager: jQuery('#pager'),
sortname: 'TYPE',
rowNum: 10,
rowList: [10, 20, 50],
sortorder: "asc",
width: 600,
height: 250,
datatype: 'json',
caption: 'Available Types',
viewrecords: true,
mtype: 'GET',
jsonReader: {
root: "rows",
page: "page",
total: "total",
records: "records",
repeatitems: false,
userdata: "userdata"
},
url: "/Type/GetData"
}).navGrid('#pager', { view: false, del: true, add: true, edit: true },
{}, // default settings for edit
{}, // default settings for add
{}, // delete instead that del:false we need this
{closeOnEscape: true, multipleSearch: true, closeAfterSearch: true }, // search options
{} /* view parameters*/
);
});
我的控制器:
public JsonResult GetData(GridSettings grid)
{
using (IWE dataContext = new IWE())
{
var query = from host in dataContext.LKTYPE
select new
{
TYPE_ID = host.TYPE_ID,
TYPE = host.TYPE,
CR_ACTIVE = host.CR_ACTIVE,
description = host.VWEPICORCATEGORY.description
};
////sorting
query = query.OrderBy(grid.SortColumn, grid.SortOrder);
//count
var count = query.Count();
//paging
var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();
//converting in grid format
var result = new
{
total = (int)Math.Ceiling((double)count / grid.PageSize),
page = grid.PageIndex,
records = count,
rows = data.ToArray()
};
return Json(result, JsonRequestBehavior.AllowGet);
}
}
GridSettings定义为:
[ModelBinder(typeof(GridModelBinder))]
public class GridSettings
{
public bool IsSearch { get; set; }
public int PageSize { get; set; }
public int PageIndex { get; set; }
public string SortColumn { get; set; }
public string SortOrder { get; set; }
public Filter Where { get; set; }
}
因此,我将从客户机获得所有分页/排序和搜索子句
如果有人能举个好例子来说明如何做到这一点,我将不胜感激。我逐步介绍了代码项目示例,但它只有几个可能的搜索运算符的示例,当您打开其他运算符时,查询将中断。更不用说它似乎不支持在网格相关表上进行搜索。这个站点有一个很好的例子,但是服务器端的工作是用PHP和MySQL完成的。我不知道这一点,但局部搜索也是一种可能性,如果它将做什么,我需要它
提前感谢,,
比利这应该能帮助其他寻找同样东西的人: 我不确定相关表搜索有什么问题——当然这只是简单地使用linq查询联接
var invoices = from i in db.Invoices
join c in customer on c.Id = i.Id // inner join related table
join ljic in db.InvoiceCalcs
on i.Id equals ljic.Id into ljict // left join related table
from ic in ljict.DefaultIfEmpty()
where (i.CustomerId == id && c.Name == "Jones") // where clause (i.e. search phrase for 2 related tables)
如果问题是dynamic linq中列的名称,则在列前面加上表名,即Customer.name==Jones等。另一种方法是使用SQL视图连接表并查询表,这也会对性能有好处。阅读我关于此主题的系列文章:Craig,事实上,我看过你的帖子,从中得到了很多信息。谢谢分享!然而,我没有看到jqGrid的多搜索功能的示例,正如您在上面的链接中看到的那样。我错过什么了吗?谢谢你抽出时间。