J'essaie d'afficher des données hiérarchiques dans une grille telerik/kendo. Les données proviennent d'une vue de base de données (importée en tant que modèle) qui contient une liste d'interruptions électriques. La clé primaire est identificateur d'interruption Il y a un champ dans la vue appelée ParentOutage qui, s'il est rempli avec l'InterruptionID d'une autre interruption, reliera les deux enregistrements. J'ai suivi l'exemple/démo de Telerik à la lettre mais je n'arrive pas à obtenir la grille pour afficher les dossiers enfants. L'événement qui remplit les enregistrements enfant ne se déclenche jamais. J'ai essayé de coder en dur les valeurs qui sont passées à la fonction getChildOutages pour voir s'il y avait un problème mais il n'a jamais été déclenché. Chaque ligne de la grille s'affiche avec la flèche pour développer l'enregistrement, mais lorsque vous l'agrandissez, un petit espace vide apparaît. En outre, seuls quelques enregistrements ont des enregistrements enfants, de sorte que la flèche ne doit pas apparaître à côté de chaque enregistrement. J'ai posté mon code ci-dessous:Telerik MVC Hiérarchie de la grille - No Child Records
<div class="form-group">
@Code
Html.Kendo.Grid(Of vw_ElectInterruptions)() _
.Name("gridInterruptions") _
.Columns(Sub(c)
c.Bound(Function(p) p.InterruptionID).Width(75).Sortable(True).Title("ID")
c.Bound(Function(p) p.ParentOutage).Width(85).Sortable(True).Title("Parent ID")
c.Bound(Function(p) p.Description).Width(175).Sortable(True).Title("Description")
c.Bound(Function(p) p.CircuitOrArea).Width(150).Sortable(True).Title("Area/Circuit")
c.Bound(Function(p) p.TimeOff).Width(100).Sortable(True).Title("TimeOff").Format("{0:dd-MMM-yy hh:mm}")
c.Bound(Function(p) p.TimeOn).Width(100).Sortable(True).Title("TimeOn").Format("{0:dd-MMM-yy hh:mm}")
End Sub) _
.Events(Function(e) e.DataBound("dataBound")) _
.ClientDetailTemplateId("template") _
.AutoBind(True) _
.Sortable(Sub(d) d.SortMode(GridSortMode.SingleColumn).AllowUnsort(False)) _
.Filterable() _
.HtmlAttributes(New With {.Style = "height:500px;"}) _
.Pageable(Sub(d) d.PageSizes(True).ButtonCount(5).Refresh(True)) _
.DataSource(Sub(d)
d.Ajax() _
.Sort(Sub(sort)
sort.Add("TimeOff").Descending()
sort.Add("InterruptionID").Ascending()
End Sub) _
.PageSize(25) _
.ServerOperation(False) _
.Read(Function(read) read.Action("ElecInterruptionRefreshGrid", "Application")) _
.Events(Sub(e)
e.Error("grid_error")
End Sub)
End Sub).Render()
End Code
</div>
<script id="template" type="text/x-kendo-template">
@Code
Html.Kendo.Grid(Of vw_ElectInterruptions)() _
.Name("childInterruptions_#=InterruptionID#") _
.Columns(Sub(c)
c.Bound(Function(p) p.InterruptionID).Width(75).Sortable(True).Title("ID")
c.Bound(Function(p) p.Description).Width(175).Sortable(True).Title("Description")
c.Bound(Function(p) p.CircuitOrArea).Width(150).Sortable(True).Title("Area/Circuit")
c.Bound(Function(p) p.TimeOff).Width(100).Sortable(True).Title("TimeOff").Format("{0:dd-MMM-yy hh:mm}")
c.Bound(Function(p) p.TimeOn).Width(100).Sortable(True).Title("TimeOn").Format("{0:dd-MMM-yy hh:mm}")
End Sub) _
.DataSource(Sub(d)
d.Ajax() _
.Read(Function(read) read.Action("GetChildOutages", "Application", New With {.id = "#=InterruptionID#"}))
End Sub).ToClientTemplate()
End Code
</script>
<script>
function dataBound() {
this.expandRow(this.tbody.find("tr.k-master-row").first());
}
</script>
And the controller code:
Public Function ElecInterruptionRefreshGrid(request As DataSourceRequest) As ActionResult
Dim model = db.vw_ElectInterruptions.ToList
Dim jsonResult = Json(model.ToDataSourceResult(request), JsonRequestBehavior.AllowGet)
jsonResult.MaxJsonLength = Int32.MaxValue
Return jsonResult
End Function
Public Function GetChildOutages(id As Integer, request As DataSourceRequest) As ActionResult
Dim model = db.vw_ElectInterruptions.Where(Function(w) w.ParentOutage = id).ToList
Dim jsonResult = Json(model.ToDataSourceResult(request), JsonRequestBehavior.AllowGet)
jsonResult.MaxJsonLength = Int32.MaxValue
Return jsonResult
End Function
Tout d'abord, je suggère fortement d'améliorer l'indentation sur ce post. Deuxièmement, obtenez-vous des erreurs dans la fenêtre de la console lorsque vous tentez d'étendre une ligne? – Sandman
Désolé pour l'indentation - Visual Studio ne semble pas être capable de gérer correctement le code rasoir/html et gâche toujours mes indentations - je les corrige et puis ils reviennent à la façon dont ils sont. J'ai été capable de résoudre le problème et posté la réponse. – PlasmaX