c# – 如何使用Kendo UI Grid与ToDataSourceResult(),IQueryable,ViewModel和AutoMapper?

使用以下类加载/过滤/订购Kendo网格的最佳方法是什么?

域:

public class Car
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual bool IsActive { get; set; }
}

视图模型

public class Carviewmodel
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual string IsActiveText { get; set; }
}

AutoMapper

Mapper.CreateMap<Car,Carviewmodel>()
      .ForMember(dest => dest.IsActiveText,src => src.MapFrom(m => m.IsActive ? "Yes" : "No"));

IQueryable的

var domainList = RepositoryFactory.GetCarRepository().GetAllQueryable();

DataSourceResult

var dataSourceResult = domainList.ToDataSourceResult<Car,Carviewmodel>(request,domain => Mapper.Map<Car,viewmodel>(domain));

...Kendo()
  .Grid<Carviewmodel>()
  .Name("gridCars")
  .Columns(columns =>
  {
     columns.Bound(c => c.Name);
     columns.Bound(c => c.IsActiveText);
  })
  .DataSource(dataSource => dataSource
     .Ajax()
     .Read(read => read.Action("ListGrid","CarsController"))
  )
  .sortable()
  .Pageable(p => p.PageSizes(true))

好的,网格第一次完美地加载,但是当我通过IsActiveText进行过滤/排序时,我得到以下消息:

Invalid property or field – ‘IsActiveText’ for type: Car

在这种情况下最好的方法是什么?

解决方法

有些事情似乎很奇怪你告诉Kendo UI为Carviewmodel制作一个网格
.Grid<Carviewmodel>()

并告诉它有一个IsActive列:

columns.Bound(c => c.IsActive);

但Carviewmodel没有该名称的列:

public class Carviewmodel
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual string IsActiveText { get; set; }
}

我的猜测是,Kendo正在从Carviewmodel IsActiveText传递字段名称,但是在服务器上运行ToDataSourceResult()来反对没有该名称属性的Car对象(一个IQueryable< Car>).映射发生在过滤&排序.

如果您希望在数据库中进行过滤和排序,那么在对数据库运行之前,您需要在IQueryable上调用.ToDataSourceResult().

如果您已经从DB中获取了所有的Car记录,那么您可以先通过做映射来解决这个问题,然后在IQueryable&Carviewmodel>上调用.ToDataSourceResult().

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...