2012-10-11 11 views
10

Sto lavorando su asp.net mvc. Sto cercando di visualizzare l'elenco dei messaggi in una griglia ui di mvc Kendo. Ho scritto il codice come,Come formattare la riga in base alle condizioni nella griglia di kendo ui mvc

Html.Kendo().Grid((List<messages>)ViewBag.Messages)) 
       .Name("grdIndox") 
       .Sortable(m => m.Enabled(true).SortMode(GridSortMode.MultipleColumn)) 
       .HtmlAttributes(new { style = "" }) 
       .Columns(
       col => 
       { 
        col.Bound(o => o.RecNo).HtmlAttributes(new { style = "display:none" }).Title("").HeaderHtmlAttributes(new { style = "display:none" }); 
        col.Bound(o => o.NoteDate).Title("Date").Format("{0:MMM d, yyyy}"); 
        col.Bound(o => o.PatName).Title("Patient"); 
        col.Bound(o => o.NoteType).Title("Type"); 
        col.Bound(o => o.Subject); 

       } 

       ) 
       .Pageable() 
       .Selectable(sel => sel.Mode(GridSelectionMode.Single).Type(GridSelectionType.Row)) 
       .DataSource(

          ds => ds.Ajax().ServerOperation(false).Model(m => m.Id(modelid => modelid.RecNo)) 
         .PageSize(10) 
          //.Read(read => read.Action("Messages_Read", "Msg")) 
       ) 

       .Events(ev => ev.Change("onSelectingGirdRow")) 
       ) 

e ho il campo nella tabella come tipo IsRead-booleano. quindi se il messaggio è non letto, allora ho bisogno di formattare quel record con caratteri in grassetto. Ho usato clientTemplates ma con questo sono in grado di formattare solo le celle particolari che voglio formattare l'intera riga. Per favore guidami.

risposta

7

È possibile utilizzare l'evento dataBound per modificare le righe.

dataBound: function() 
{ 
    $('td').each(function(){ 
    if(some condition...) 
     { 
     $(this).addClass('someBoldClass')} 
     } 
    }) 
} 
18

come Sanja suggerito è possibile utilizzare l'evento Databound ma sarà meglio per passare il tr elementi (le righe). Suppongo anche che sia necessario il relativo dataItem per verificare se la proprietà che indica se il messaggio viene letto.

ad es.

dataBound: function() 
{ 
    var grid = this; 
    grid.tbody.find('>tr').each(function(){ 
    var dataItem = grid.dataItem(this); 
    if(!dataItem.IsMessageRead) 
     { 
     $(this).addClass('someBoldClass'); 
     } 
    }) 
} 
+0

Non dovrebbe essere come $ (this) .find ("tr"). Each (function() ...? Il modo in cui l'ha scritto, lo farà scorrere tutte TR nella pagina – Mahmoodvcs

+0

Esatto, ho aggiornato il mio post e ora esegue il ciclo solo attraverso le righe secondarie dirette dell'elemento tabella Grid. –

+0

è vero che se l'utente esegue il binding dei dati del server, ala DataSource (ds => ds.Server(), tu non posso accedere all'elemento di dati sottostante nel javascript usando grid.dataItem (this)? – topwik

Problemi correlati