Filtern einer Kendo-Raster auf ein benutzerdefiniertes Objekt
Ich habe einen Kendo-Gitter mit einer display-Vorlage mit einem benutzerdefinierten Objekt. Ich habe IComparable implementiert, um zu ermöglichen, gruppieren und Sortieren, aber ich bin mir nicht sicher, was ich tun muss, um die Filterung zu arbeiten. Wie es ist, wenn ich auf die Schaltfläche Filter für die Spalte es hat eine leere dropdown-statt der üblichen "Enthält", "beginnt mit", "gleich" und solche Optionen, die normalerweise zeigen würden. Ich bin mit dem ToDataSourceResult zu manipulieren die Ergebnisse.
Modell:
public class LEAProgramMap
{
public string entity_program { get; set; }
[UIHint("ProgramEditor")]
public ProgramDDL program_desc { get; set; }
}
Dropdown:
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");
}
}
und der Blick:
@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>
InformationsquelleAutor Elsimer | 2012-11-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Leider Kendo UI nicht unterstützt, Klasse Komposition /View-Modelle mit komplexen Objekten, Ihre Modelle müssen komplett flach, um zu vermeiden unerwartete Verhalten. Damit Ihre Klasse sollte wie folgt Aussehen.
Als ich das erste stolperte über die Tatsache, Kendo-UI-Ansicht-Modelle werden komplett flach war, als ich versuchte, mich zu bewerben, Sortieren, es scheint in der Lage sein Modell zu Binden, Richtig, so kann es die Daten anzeigen. Wenn Sie versuchen, etwas zu tun mit der DataSourceResult (Filter, Sortierung, Gruppierung etc) scheint es zu unerwarteten Ergebnissen führen.
Ich war in der Lage zu Sortieren, komplexe Klassen im Kendo nach der Implementierung von IComparable obwohl. Die Gruppierung funktioniert auch - vielleicht, weil ich bin mit einer Vorlage?
Hmm, das könnte ein paar Dinge, ist der wahrscheinlichste Grund ist, dass Ihr Modell eine IList und die Gruppierung / Sortierung erfolgt Im Speicher und braucht nicht übersetzt zu werden, um SQL - arbeite ich mit IQueryable ' s
hier ist die Antwort von Kendo ' s support-team: es tut mir Leid zu sagen, dass die Filterung auf ein Komplexes Objekt ist nicht unterstützt, und Sie sind nicht in der Lage zu ändern, die gebaut-in filter Menü, welches automatisch generiert Datendefinitionssprache (ddl, nicht gefüllt mit Optionen, wenn die Spalte gebunden ist, Komplexes Objekt). Ich schlage vor, Sie erstellen eine externe widget/input filtern Sie die dataSource wie in [demos.kendoui.com/web/grid/toolbar-template.html](in dieser demo) - die DropDownList positioniert ist in der Symbolleiste können Sie zum Beispiel legen Sie es irgendwo anders auf der Seite oder sogar in das ColumnHeader-von der Raster-Spalten.
InformationsquelleAutor SimonGates