我的项目有两个主要问题阻止我能够执行正常的基本Kendo UI gridbind。 1.我没有完全访问所需的SQL数据(我无法创建视图)2。其中一个字段非常大(字段会重载ViewModel)。
我能够让我的网格工作,但我觉得有更好的方法来完成任务。从本质上讲,我的问题是我只能将网格绑定到一个DB表。为了传递这个,我绑定到外键字段并使用clientTemplate来填充读取的数据,但我觉得应该有一种更直接的方法来将字段绑定到数据。我的读取数据是来自EF的Linq加入的actionresult,转换为JSON。 这是我的代码,如果有人可以提出建议。表2中的D_Type是我试图直接绑定到列的内容:
@(Html.Kendo().Grid<ProjectName.Models.Table1>()
.Name("grid")
.Scrollable()
.ColumnMenu()
.Reorderable(reorder => reorder.Columns(true))
.Columns(columns =>
{
columns.Bound(c => c.P_Name);
columns.Bound(c => c.E_Name);
//Cannot be directly bound to a column because it is part of Table2 table
columns.Bound(c => c.TypeId).Title("Type").ClientTemplate("#= D_Type #").Filterable(false);
columns.Command(command => command.Custom("Details").Click("showDetails")).Title("Results").Width(80);
columns.Bound(c => c.Destination);
columns.Bound(c => c.Location);
columns.Bound(c => c.Version);
columns.Bound(c => c.StartDt);
columns.Bound(c => c.EndDt);
columns.Bound(c => c.StartDt).Title("Duration").ClientTemplate("#: calcDuration(StartDt, EndDt) #").Sortable(false).Filterable(false);
columns.Bound(c => c.);
columns.Bound(c => c.MiscNotes).ClientTemplate("#: errorDisplay(ResultObject) # ").Sortable(false).Filterable(false);
})
//Style dictates full grid height
.HtmlAttributes(new { style = "height: 725px;" })
.Filterable()
.Resizable(resize => resize.Columns(true))
.Sortable(sortable => sortable
.AllowUnsort(true)
.SortMode(GridSortMode.SingleColumn))
.Pageable(pageable => pageable
.Refresh(false)
.PageSizes(true)
.ButtonCount(5))
.Events(e => e.DataBound("onDataBound"))
.DataSource(dataSource => dataSource
.Ajax()
.Sort(sort => sort.Add("StartDt").Descending())
.Read(read => read.Action("Project_Read", "Grid"))
.PageSize(20)
.ServerOperation(true)
)
)
答案 0 :(得分:0)
不要将网格绑定到ProjectName.Models.Table1。
相反,将它绑定到ViewModel,该ViewModel包含Table1中的字段和Table2中要在Grid中显示的字段,即
public class SpecificGridViewModel
{
public string P_Name { get; set; }
// Other fields you want from Table1
// ...
// PLUS the field(s) you want from the other, joined table.
public string D_Type { get; set; }
}
然后你让Project_Read方法返回你从LINQ查询而不是Table1s列表中构造的这些ViewModel的列表。
即。编写一个LINQ查询,返回您想要的确切数据(Table1中的数据通过Table1.TypeID与Table2.D_Type连接),并返回您创建的自定义ViewModel的结果集,以保存查询中的数据,然后将网格绑定到模型而不是&#34; raw&#34;表1模型。