我正在尝试使用MVCGrid.net实现网格
在MVCGridConfig.cs中他们有类似的东西
.WithRetrieveDataMethod((context) =>
{
var options = context.QueryOptions;
int totalRecords;
var repo = DependencyResolver.Current.GetService<IPersonRepository>();
...
}
我不太了解这个IPersonRepository。请让我知道这个界面应该做什么?
最初我使用的是WebGrid,我将客户列表传递给视图,在视图中有IEnumerable来查看网格。如果用户有搜索字词,我会将该搜索字词传递给控制器,控制器会相应地返回与搜索字词匹配的客户列表。
我无法将如何将WebGrid逻辑实现到此WithRetrieveDataMethod中。具体来说,我应该对该界面做些什么。
此外,如果从视图中传递了搜索词,我该如何更改WithRetrieveDataMethod。
答案 0 :(得分:0)
此IPersonRepository用于网格中列的全局搜索,排序和过滤。您需要将“filterFirstName”,“filterLastName”等更改为您在项目中使用的相应元素,并且还可以进行其他更改。在“案例”部分中,您只需要在项目中使用的属性。
public interface IPersonRepository
{
IEnumerable<Person> GetData(out int totalRecords, string globalSearch, int? limitOffset, int? limitRowCount, string orderBy, bool desc);
IEnumerable<Person> GetData(out int totalRecords, int? limitOffset, int? limitRowCount, string orderBy, bool desc);
IEnumerable<Person> GetData(out int totalRecords, string filterFirstName, string filterLastName, bool? filterActive, int? limitOffset, int? limitRowCount, string orderBy, bool desc);
}
public class PersonRepository : IPersonRepository
{
public IEnumerable<Person> GetData(out int totalRecords, string filterFirstName, string filterLastName, bool? filterActive, int? limitOffset, int? limitRowCount, string orderBy, bool desc)
{
return GetData(out totalRecords, null, filterFirstName, filterLastName, filterActive, limitOffset, limitRowCount, orderBy, desc);
}
public IEnumerable<Person> GetData(out int totalRecords, string globalSearch, int? limitOffset, int? limitRowCount, string orderBy, bool desc)
{
return GetData(out totalRecords, globalSearch, null, null, null, limitOffset, limitRowCount, orderBy, desc);
}
public IEnumerable<Person> GetData(out int totalRecords, string globalSearch, string filterFirstName, string filterLastName, bool? filterActive, int? limitOffset, int? limitRowCount, string orderBy, bool desc)
{
using (var db = new SampleDatabaseEntities())
{
var query = db.People.AsQueryable();
if (!String.IsNullOrWhiteSpace(filterFirstName))
{
query = query.Where(p => p.FirstName.Contains(filterFirstName));
}
if (!String.IsNullOrWhiteSpace(filterLastName))
{
query = query.Where(p => p.LastName.Contains(filterLastName));
}
if (filterActive.HasValue)
{
query = query.Where(p => p.Active == filterActive.Value);
}
if (!String.IsNullOrWhiteSpace(globalSearch))
{
query = query.Where(p => (p.FirstName + " " + p.LastName).Contains(globalSearch));
}
totalRecords = query.Count();
if (!String.IsNullOrWhiteSpace(orderBy))
{
switch (orderBy.ToLower())
{
case "firstname":
if (!desc)
query = query.OrderBy(p => p.FirstName);
else
query = query.OrderByDescending(p => p.FirstName);
break;
case "lastname":
if (!desc)
query = query.OrderBy(p => p.LastName);
else
query = query.OrderByDescending(p => p.LastName);
break;
case "active":
if (!desc)
query = query.OrderBy(p => p.Active);
else
query = query.OrderByDescending(p => p.Active);
break;
case "email":
if (!desc)
query = query.OrderBy(p => p.Email);
else
query = query.OrderByDescending(p => p.Email);
break;
case "gender":
if (!desc)
query = query.OrderBy(p => p.Gender);
else
query = query.OrderByDescending(p => p.Gender);
break;
case "id":
if (!desc)
query = query.OrderBy(p => p.Id);
else
query = query.OrderByDescending(p => p.Id);
break;
case "startdate":
if (!desc)
query = query.OrderBy(p => p.StartDate);
else
query = query.OrderByDescending(p => p.StartDate);
break;
}
}
if (limitOffset.HasValue)
{
query = query.Skip(limitOffset.Value).Take(limitRowCount.Value);
}
return query.ToList();
}
}
public IEnumerable<Person> GetData(out int totalRecords, int? limitOffset, int? limitRowCount, string orderBy, bool desc)
{
return GetData(out totalRecords, null, null, null, limitOffset, limitRowCount, orderBy, desc);
}
}