首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DependencyResolver.Current.GetService

DependencyResolver.Current.GetService
EN

Stack Overflow用户
提问于 2016-10-18 01:34:14
回答 1查看 2.5K关注 0票数 1

我正在尝试使用MVCGrid.net实现一个网格

在MVCGridConfig.cs中,他们有类似这样的东西

代码语言:javascript
复制
 .WithRetrieveDataMethod((context) =>
         {
             var options = context.QueryOptions;
             int totalRecords;
             var repo = DependencyResolver.Current.GetService<IPersonRepository>();
             ...
          }

我不太理解这个IPersonRepository。请让我知道这个接口应该做什么?

最初我使用的是WebGrid,我将客户列表传递给视图,并在视图中使用IEnumerable来查看网格。如果用户有一个搜索项,我会将该搜索项传递给控制器,控制器将相应地返回与搜索项匹配的客户列表。

我不能描述如何在这个WithRetrieveDataMethod中实现WebGrid逻辑。具体地说,我应该对那个界面做些什么。

此外,如果从视图传递了搜索词,我如何更改WithRetrieveDataMethod。

EN

回答 1

Stack Overflow用户

发布于 2016-11-22 21:03:26

此IPersonRepository用于对网格中的列进行全局搜索、排序和过滤。您需要将“filterFirstName”、“filterLastName”等更改为您在项目中使用的相应元素,您也可以进行其他更改。在Case部分中,您也只需要在项目中使用的属性。

代码语言:javascript
复制
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);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40092409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档