Как отформатировать строку на основе условия в сетке kendo ui mvc

Я работаю над asp.net mvc. Я пытаюсь отобразить список сообщений в сетке Kendo mvc ui. Я написал код, например,

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

и у меня есть поле в таблице типа IsRead-boolean. поэтому, если сообщение непрочитано, мне нужно отформатировать эту запись жирным шрифтом. Я использовал clientTemplates, но с этим я могу форматировать только определенные ячейки, которые хочу отформатировать всю строку. Пожалуйста, помогите мне.


person Karthik Bammidi    schedule 11.10.2012    source источник


Ответы (3)


как предложил Саня, вы можете использовать событие dataBound, но будет лучше циклически перемещаться по элементам tr (строкам). Также я предполагаю, что вам понадобится связанный dataItem, чтобы проверить, указывает ли свойство, если сообщение прочитано.

e.g.

dataBound: function ()
{
   var grid = this;
   grid.tbody.find('>tr').each(function(){
     var dataItem = grid.dataItem(this);
     if(!dataItem.IsMessageRead)
      {
         $(this).addClass('someBoldClass');
      }
   })
}
person Petur Subev    schedule 11.10.2012
comment
Разве это не должно быть похоже на $(this).find(tr).each(function()...? То, как вы это написали, будет циклически перебирать все TR на странице. - person Mahmood Dehghan; 11.01.2013
comment
Правильно, я обновил свой пост, и теперь он циклически проходит только через прямые дочерние строки элемента таблицы Grid. - person Petur Subev; 11.01.2013
comment
правда ли, что если вы привязываете данные пользователя к серверу, аля DataSource( ds => ds.Server(), вы не можете получить доступ к базовому элементу данных в javascript, используя grid.dataItem(this)? - person topwik; 28.01.2013

Вы можете использовать событие dataBound для изменения строк.

dataBound: function ()
{
   $('td').each(function(){
     if(some condition...)
      {
         $(this).addClass('someBoldClass')}
      }
   })
}
person Sanja Melnichuk    schedule 11.10.2012

Есть еще один способ сделать это. Он называется RowAction.

.RowAction(row => 
{
   if (condition)
   {
      row.HtmlAttributes["class"] = "someBoldClass";
   }
})

Обратите внимание, что RowAction доступен только для строк, отображаемых на серверной стороне. Поэтому в вашем случае вы можете использовать RowAction в качестве альтернативы DataBound.

person Murat Gündeş    schedule 22.06.2018