如何自定义gijgo网格代码以使用可以由不同模块使用的通用存储库功能?

时间:2019-05-14 18:26:31

标签: c# asp.net asp.net-mvc linq generic-repository

我在我的mvc项目中使用了gijgo网格。我使用通用存储库模式。

网格链接为

https://gijgo.com/grid/demos/ajax-sourced-data

       I want to write a generic repository functions for the   functions of the grid(as given below) - so that it can work for query result set from multiple tables into a single grid with multiple dynamic columns or single master table with dynamic columns. I really don't know how to start (I am not good with linq predicate)  - to convert to generic repository functions - which can be accessed with unit of work 

我尝试自定义列,但无法正确显示。如何分别编写一个函数来获取和绑定网格(带有过滤器和排序),编辑行,添加新行或删除行?

public JsonResult Get(int? page, int? limit, string sortBy, string direction, string name, string nationality, string placeOfBirth)
    {
        List<Models.DTO.Player> records;
        int total;
        using (ApplicationDbContext context = new ApplicationDbContext())
        {
            var query = context.Players.Select(p => new Models.DTO.Player
            {
                ID = p.ID,
                Name = p.Name,
                PlaceOfBirth = p.PlaceOfBirth,
                DateOfBirth = p.DateOfBirth,
                CountryID = p.CountryID,
                CountryName = p.Country != null ? p.Country.Name : "",
                IsActive = p.IsActive,
                OrderNumber = p.OrderNumber
            });

            if (!string.IsNullOrWhiteSpace(name))
            {
                query = query.Where(q => q.Name.Contains(name));
            }

            if (!string.IsNullOrWhiteSpace(nationality))
            {
                query = query.Where(q => q.CountryName != null && q.CountryName.Contains(nationality));
            }

            if (!string.IsNullOrWhiteSpace(placeOfBirth))
            {
                query = query.Where(q => q.PlaceOfBirth != null && q.PlaceOfBirth.Contains(placeOfBirth));
            }

            if (!string.IsNullOrEmpty(sortBy) && !string.IsNullOrEmpty(direction))
            {
                if (direction.Trim().ToLower() == "asc")
                {
                    switch (sortBy.Trim().ToLower())
                    {
                        case "name":
                            query = query.OrderBy(q => q.Name);
                            break;
                        case "countryname":
                            query = query.OrderBy(q => q.CountryName);
                            break;
                        case "placeOfBirth":
                            query = query.OrderBy(q => q.PlaceOfBirth);
                            break;
                        case "dateofbirth":
                            query = query.OrderBy(q => q.DateOfBirth);
                            break;
                    }
                }
                else
                {
                    switch (sortBy.Trim().ToLower())
                    {
                        case "name":
                            query = query.OrderByDescending(q => q.Name);
                            break;
                        case "countryname":
                            query = query.OrderByDescending(q => q.CountryName);
                            break;
                        case "placeOfBirth":
                            query = query.OrderByDescending(q => q.PlaceOfBirth);
                            break;
                        case "dateofbirth":
                            query = query.OrderByDescending(q => q.DateOfBirth);
                            break;
                    }
                }
            }
            else
            {
                query = query.OrderBy(q => q.OrderNumber);
            }

            total = query.Count();
            if (page.HasValue && limit.HasValue)
            {
                int start = (page.Value - 1) * limit.Value;
                records = query.Skip(start).Take(limit.Value).ToList();
            }
            else
            {
                records = query.ToList();
            }
        }

        return this.Json(new { records, total }, JsonRequestBehavior.AllowGet);
    }

    [HttpPost]
    public JsonResult Save(Models.DTO.Player record)
    {
        Player entity;
        using (ApplicationDbContext context = new ApplicationDbContext())
        {
            if (record.ID > 0)
            {
                entity = context.Players.First(p => p.ID == record.ID);
                entity.Name = record.Name;
                entity.PlaceOfBirth = record.PlaceOfBirth;
                entity.DateOfBirth = record.DateOfBirth;
                entity.CountryID = record.CountryID;
                entity.Country = context.Locations.FirstOrDefault(l => l.ID == record.CountryID);
                entity.IsActive = record.IsActive;
            }
            else
            {
                context.Players.Add(new Player
                {
                    Name = record.Name,
                    PlaceOfBirth = record.PlaceOfBirth,
                    DateOfBirth = record.DateOfBirth,
                    CountryID = record.CountryID,
                    Country = context.Locations.FirstOrDefault(l => l.ID == record.CountryID),
                    IsActive = record.IsActive
                });
            }
            context.SaveChanges();
        }
        return Json(new { result = true });
    }

    [HttpPost]
    public JsonResult Delete(int id)
    {
        using (ApplicationDbContext context = new ApplicationDbContext())
        {
            Player entity = context.Players.First(p => p.ID == id);
            context.Players.Remove(entity);
            context.SaveChanges();
        }
        return Json(new { result = true });
    }

    public JsonResult GetTeams(int playerId, int? page, int? limit)
    {
        List<Models.DTO.PlayerTeam> records;
        int total;
        using (ApplicationDbContext context = new ApplicationDbContext())
        {
            var query = context.PlayerTeams.Where(pt => pt.PlayerID == playerId).Select(pt => new Models.DTO.PlayerTeam
            {
                ID = pt.ID,
                PlayerID = pt.PlayerID,
                FromYear = pt.FromYear,
                ToYear = pt.ToYear,
                Team = pt.Team,
                Apps = pt.Apps,
                Goals = pt.Goals
            });

            total = query.Count();
            if (page.HasValue && limit.HasValue)
            {
                int start = (page.Value - 1) * limit.Value;
                records = query.OrderBy(pt => pt.FromYear).Skip(start).Take(limit.Value).ToList();
            }
            else
            {
                records = query.ToList();
            }
        }

        return this.Json(new { records, total }, JsonRequestBehavior.AllowGet);
    }

0 个答案:

没有答案