2013-10-03 13 views
7

Sto utilizzando la griglia di kendo con una griglia gerarchica (griglia principale e sottorubrica) con custom.command; Quando viene cliccato il pulsante di visualizzazione di Child (nel caso della griglia principale funziona bene) dovrebbe chiamare la funzione java-script che mostra i dettagli per quella riga, ma quello che sta accadendo è che chiama javascript due volte, la prima volta che ha l'ID di riga corretto (cioè di la stessa riga) e poi la seconda volta con un ID errato (ovvero il primo id della griglia principale).Il comando personalizzato della griglia con gerarchia chiama due volte la funzione javascript.

Codice come indicato di seguito.

Parent-Grid

@(Html.Kendo().Grid<IRIS.Web.BackOffice.ViewModels.AuditListView>() 
.Name("GridAudit") 
.Columns(column => 
    { 
     column.Bound(model => model.LogId).Visible(true); 
     column.Bound(model => model.Date); 
     column.Bound(model => model.Time); 
     column.Bound(model => model.User).ClientTemplate(IRIS.Common.Helpers.ViewTemplateFormats.GetUnWrapColum("User")); 
     column.Bound(model => model.Module).ClientTemplate(IRIS.Common.Helpers.ViewTemplateFormats.GetUnWrapColum("Module")).Width(150); 
     column.Bound(model => model.Activity); 
     column.Bound(model => model.Description).ClientTemplate(IRIS.Common.Helpers.ViewTemplateFormats.GetUnWrapColum("Description")).Width(200); 
     column.Command(command => 
     { 
      command.Custom("View").Text(" ").Click("onParentAuditHirarchy"); 
     }).Width("6em").Title("Actions"); 
    }) 
.Reorderable(reorder => reorder.Columns(true)) 
.Selectable(select => select.Enabled(true).Mode(GridSelectionMode.Single).Type(GridSelectionType.Row)) 
.ClientDetailTemplateId("template1") 
.Sortable() 
.Scrollable(scroll => scroll.Enabled(false)) 
.Filterable() 
.Pageable(page => page.ButtonCount(5)) 
.HtmlAttributes(new { style = "height:400px" }) 
.DataSource(dataSource => dataSource 
    .Ajax() 
    .Read(read => read.Action("Audit_Load", "AuditLog").Data("getSearchData") 
) 
.PageSize(11) 
) 
) 

Bambini-Grid

<script id="template1" type="text/kendo-tmpl"> 
@(Html.Kendo().Grid<IRIS.Web.BackOffice.ViewModels.AuditListView>() 
    .Name("GridDetails" + "#=LogId#") 
    .AutoBind(true) 
    .Resizable(resize => resize.Columns(true)) 
    .Reorderable(reorder => reorder.Columns(true)) 
    .Columns(column => 
    { 
     column.Bound(model => model.LogId).Visible(true); 
     column.Bound(model => model.Date); 
     column.Bound(model => model.Time); 
     column.Bound(model => model.User).ClientTemplate(IRIS.Common.Helpers.ViewTemplateFormats.GetUnWrapColum("User")); 
     column.Bound(model => model.Module).ClientTemplate(IRIS.Common.Helpers.ViewTemplateFormats.GetUnWrapColum("Module")).Width(150); 
     column.Bound(model => model.Activity); 
     column.Bound(model => model.Description).Width(200);//.ClientTemplate(IRIS.Common.Helpers.ViewTemplateFormats.GetUnWrapColum("Description")).Width(200); 
     column.Command(command => 
     { 
      command.Custom("View").Text(" ").Click("onGridAuditHirarchy"); 
     }).Width("6em").Title("Actions"); 
    }) 
    .Selectable() 
    .ClientDetailTemplateId("template2") 
    .Sortable() 
    .HtmlAttributes(new { style = "height:300px;" }) 
    .Scrollable(scroll => scroll.Enabled(false)) 
    .Filterable() 
    .Pageable(page => page.ButtonCount(5)) 
    .DataSource(dataSource => dataSource 
     .Ajax() 
     .Read(read => read.Action("LoadHirarchy", "AuditLog", new { auditId = "#=LogId#" })) 
     .PageSize(3) 
    ) 
    .ToClientTemplate() 
) 
</script> 

Javascript

<script type="text/javascript"> 

function GetAuditId() { 
    return { 
     auditId: $(hdnTempGridId).val() 
    } 
} 

onParentAuditHirarchy = function (e) { 
    e.preventDefault(); 
    var dataItem = this.dataItem($(e.currentTarget).closest("tr")); 
    var id = dataItem.LogId; 

     $(hdnTempGridId).val(id); 

     var win = $("#window").data("kendoWindow"); 
     var grid = $("#GridDetails").data("kendoGrid"); 
     grid.dataSource.read(); 

     win.setOptions({ 
      width: 900, 
      height: 400 
     }); 

     win.open(); 
     win.center(); 


} 

onGridAuditHirarchy = function (e) { 
    e.preventDefault(); 
    var dataItem = this.dataItem($(e.currentTarget).closest("tr")); 
    var id = dataItem.LogId; 

    if (e.delegateTarget.id != 'GridAudit') { 
     $(hdnTempGridId).val(id); 

     var win = $("#window").data("kendoWindow"); 
     var grid = $("#GridDetails").data("kendoGrid"); 
     grid.dataSource.read(); 

     win.setOptions({ 
      width: 900, 
      height: 400 
     }); 

     win.open(); 
     win.center(); 
    } 

} 

$(document).ready(function() { 
    var win = $("#window").data("kendoWindow"); 
    win.close(); 

}); 
</script> 

E poi attraverso java-script finestra Kendo è aperto.

@(Html.Kendo().Window() 
    .Name("window") //The name of the window is mandatory. It specifies the "id" attribute of the widget. 
    .Title("Audit Log Detail(s)") //set the title of the window 
    .Content(@<text> 
     @(Html.Kendo().Grid<IRIS.Web.BackOffice.ViewModels.AuditDetailListModel>() 
    .Name("GridDetails") 
    .AutoBind(false) 
    .Resizable(resize => resize.Columns(true)) 
    .Reorderable(reorder => reorder.Columns(true)) 
    .Selectable() 
    .Sortable() 
    .HtmlAttributes(new { style = "height:300px;" }) 
    .Scrollable(scroll => scroll.Enabled(false)) 
    .Filterable() 
    .Pageable(page => page.ButtonCount(5)) 

    .DataSource(dataSource => dataSource 
       .Ajax() 
       .Read(read => read.Action("LoadDetails", "AuditLog").Data("GetAuditId")) 
       .PageSize(10) 
      ) 
) 
      </text>) 
    .Visible(false) 
    .Modal(true) 
) 
+0

Ho anche questo problema. e non penso che stia chiamando la funzione due volte, ma chiama anche la funzione e la funzione genitore, nel mio caso ho griglie di gerarchia a 4 livelli al quarto livello, si chiama 4 volte! – Star

risposta

1

È possibile ottenere intorno a questo controllando se l'elemento mostrato dal primo evento di comando è visibile:

function showDetailsLevel(e) { 
    e.preventDefault(); 
    originatingId = this.dataItem($(e.currentTarget).closest("tr")).Id 

    var wnd = $("#Details").data("kendoWindow"); 

    if (!$("#Details").is(":visible")) { 
     wnd.center(); 
     wnd.open(); 
     var grid = $("#DetailGrid").data("kendoGrid"); 
     grid.dataSource.read(); 
    } 
} 
1

ho capito finalmente (per il mio problema, almeno)

la il nome dell'azione personalizzata non può essere lo stesso nella griglia padre e figlio

command.Custom("View")//parent 
command.Custom("View")//child 

quindi renderlo

command.Custom("View1")//parent 
command.Custom("View2")//child 

Spero che questo risparmi il tempo di qualcun altro.

+0

Immagino di non poter riprendere la mia taglia :) – Star

Problemi correlati