1
我有一個使用自定義對象的顯示模板的Kendo網格。我已經實現了IComparable來允許分組和排序,但我不知道我需要做些什麼才能使過濾工作。實際上,當我單擊列的過濾器按鈕時,它會有一個空白下拉列表,而不是通常的「包含,開頭,等於」以及通常顯示的這些選項。我正在使用ToDataSourceResult來操縱結果。在自定義對象上過濾Kendo網格
模型:
public class LEAProgramMap
{
public string entity_program { get; set; }
[UIHint("ProgramEditor")]
public ProgramDDL program_desc { get; set; }
}
下拉:
public class ProgramDDL : IComparable
{
public short program_id { get; set; }
public string entity_program { get; set; }
public string program_desc { get; set; }
public int CompareTo(object obj)
{
if (obj is ProgramDDL)
{
ProgramDDL rev2 = (ProgramDDL)obj;
return program_desc.CompareTo(rev2.program_desc);
}
else
throw new ArgumentException("Object is not a ProgramDDL");
}
}
和視圖:
@model IEnumerable<Datamart.Models.ViewModels.LEAProgramMap>
@{
ViewBag.Title = "CreateProgramMap";
var snapshot = Session["snapshot_id"] ?? Request.Params["snapshot_id"];
}
<h2>CreateProgramMap</h2>
@(Html.Kendo().Grid(Model)
.Name("Programs")
.Columns(cols =>
{
cols.Bound(p => p.entity_program).ClientTemplate("#=entity_program#");
cols.Bound(p => p.program_desc).ClientTemplate("#=program_desc.program_desc#");
})
.ToolBar(commands =>
{
commands.Save();
})
.Editable(edit => edit.Enabled(true).Mode(GridEditMode.InCell))
.DataSource(ds => ds
.Ajax()
.Model(model =>
{
model.Id(p => p.entity_program);
model.Field(p => p.entity_program).Editable(false);
})
// Configure RU -->
.Read(read => read.Action("Program_Read", "Draft").Data("additionalData"))
.Update(update => update.Action("Program_Update", "Draft").Data("additionalData"))
//.ServerOperation(false)
.Batch(true)
.Events(events => events
//.Change("onChange")
.Error("onError")
)
)
// <-- Configure RU
.Pageable(page => page.PageSizes(new int[] { 10, 25, 50, 100 }).Enabled(true))
.Groupable(group => group.Enabled(true))
.Filterable(filter => filter.Enabled(true).Extra(true))
.Sortable(sort => sort.Enabled(true).SortMode(GridSortMode.SingleColumn).AllowUnsort(true))
.Navigatable(nav => nav.Enabled(true))
.Resizable(resizing => resizing.Columns(true))
.Reorderable(reorder => reorder.Columns(true))
)
<script>
function additionalData() {
return {
snapshot_id: "@snapshot"
};
}
function onError(e, status) {
if (e.errors) {
var message = "The following errors have occurred:\n";
$.each(e.errors, function (key, value) {
if (value.errors) {
message += value.errors.join("\n");
}
});
alert(message);
}
}
function onChange() {
var grid = $("#Programs").data("kendoGrid");
grid.dataSource.read();
}
</script>
所以我可以使用我當前的查看模型,但只是過濾?我將不得不添加一個功能請求 - 這似乎很奇怪,因爲我認爲如果它是一個重要功能,我可以在自定義解析器中實現它們。如果客戶認爲它足夠重要,那麼我現在可能只是在網格之外添加一個搜索,然後在發佈更優雅的解決方案後再回去搜索。 – Elsimer
當我第一次偶然發現Kendo UI視圖模型必須是完全平坦的時候,當我嘗試應用排序時,它似乎能夠正確綁定模型,以便它可以顯示數據。當你試圖用DataSourceResult(過濾,排序,分組等)做任何事情時,它似乎會給出意想不到的結果。 – SimonGates
雖然在實現IComparable後,我能夠在Kendo中對複雜的類進行排序。分組也行得通 - 也許是因爲我在使用模板? – Elsimer