2012-10-11 7 views
10

Ich arbeite auf asp.net mvc. Ich versuche, eine Liste von Nachrichten in einem Kendo-MVU-Gitter anzuzeigen. Ich habe den Code wie geschrieben,Wie formatiert man die Zeile basierend auf Bedingung in Kendo ui mvc Raster

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")) 
       ) 

und ich habe das Feld in der Tabelle wie IsRead-Typ boolean. Wenn also die Nachricht ungelesen ist, muss ich diesen Eintrag fett formatieren. Ich habe clientTemplates verwendet, aber damit kann ich nur bestimmte Zellen formatieren, die ich ganze Zeile formatieren möchte. Bitte führen Sie mich.

Antwort

7

Sie können das DataBound-Ereignis verwenden, um Ihre Zeilen zu ändern.

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

wie Sanja vorgeschlagen, dass Sie das Databound-Ereignis verwenden können, aber es wird durch die tr Elemente (Zeilen), um besser sein. Ich nehme auch an, dass Sie die verwandte dataItem benötigen, um zu überprüfen, ob die Eigenschaft angibt, ob die Nachricht gelesen wird.

z.B.

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

Sollte es nicht wie $ sein (dieser) .find ("tr"). Each (function() ...? So wie du es geschrieben hat, wird es durch alle von TRs auf der Seite – Mahmoodvcs

+0

Das ist richtig, ich habe meinen Beitrag aktualisiert und jetzt läuft er nur durch die direkten Kinderzeilen des Tabellenelements Grid. –

+0

ist es wahr, dass wenn Sie Benutzerserver Datenbindung, ala DataSource (ds => ds.Server()) kann nicht auf das zugrunde liegende Datenelement im Javascript zugreifen mit grid.dataItem (this)? – topwik

Verwandte Themen