2012-11-13 7 views
0

J'ai une grille Telerik imbriquée dans une autre grille Telerik et je veux forcer la grille à se rafraîchir à chaque expansion de la grille parente. Les données dans la grille imbriquée peuvent changer rapidement et j'ai donc besoin de la grille imbriquée pour se rafraîchir à chaque événement d'expansion.Force Telerik Grid MVC actualiser dans DetailView expand

Mon Telerik Grille:

<div> 
@(Html.Telerik().Grid<RentableUnit>() 
     .Name("RentableUnits") 
     .Columns(columns => 
        { 
         columns.Bound(e => e.UnitID).Hidden(); 
         columns.Bound(e => e.Name).Width(800); 
         columns.Bound(e => e.IsExpanded).Hidden(); 
        }) 
     .ClientEvents(events => events.OnRowDataBound("employees_onRowDataBound") 
            .OnDetailViewExpand("unit_onDetailViewExpand") 
            .OnDetailViewCollapse("unit_onDetailViewCollapse") 
            .OnDetailViewExpand("toggleDetail") 
            ) 
     .DetailView(details => details.ClientTemplate(
      //stuff in template 
     ) 
.DataBinding(dataBinding => dataBinding.Ajax().Select("RentableUnits", "Home")) 
.Sortable() 
) 
</div> 

Mon Javascript:

function unit_onDetailViewExpand(e) { 
    var mstRow = e.masterRow; 
    var unitNumber = mstRow.cells[1].innerHTML; 
    var grid = $(this).data('tGrid'); 
    grid.$rows().not(e.masterRow).each(function(index, row) { 
     grid.collapseRow(row); 
    }); 

    //I´ve been trying to force databinding on the grid row 
    grid.expandRow(e.row); 
    //I´ve been trying this among others but I´m missing something 
} 

Quelqu'un peut-il me diriger dans la bonne direction sur la façon de forcer le GridRow redéfinissez? Toute aide est très appréciée :)

Répondre

1

De cette façon, vous reliez toutes les grilles sur la page. Pour actualiser uniquement la grille qui se trouve à l'intérieur de la ligne de détail, vous pouvez utiliser la logique suivante à l'intérieur de l'événement DetailExpand pour trouver la grille obtenir son objet client et utiliser la méthode ajaxRequest.

function unit_onDetailViewExpand(e){ 
    $(e.detailRow).find('.t-grid').data().tGrid.ajaxRequest(); 
} 
+0

Thanx @XMR, c'est beaucoup plus simple, et plus propre à utiliser la fonction find() pour cela. Je suis encore en train d'apprendre mon chemin dans le monde javascript;) – gardarvalur

0

J'ai parlé à bientôt, juste après avoir posté cette question la réponse m'a frappé (pour une raison étrange). Je réussi à forcer le rafraîchissement de la grille avec cette boucle:

 for (var i = 0; i < 6; i++) { 
     $('#' + i + 'UnitPeriod_' + unitNumber + ' .t-refresh').trigger('click'); 
    } 

I remplacé cette ligne grid.expandRow (e.row) avec la boucle ci-dessus. Thanx de toute façon :)

Questions connexes