开发者

Style a single row in a Telerik MVC Grid - Client Side

I am trying to style only one row (from the client) of a Grid.

Here is my setup: I am using Ajax binding to load the initial Grid data. After that, I am editing all data from the Client side based on events from other controls. So, a user may click some other control which causes a row to be "highlighted" on my Gird (without ever actually touching the grid).

I did some inspecting (with firebug) and see that the in the table that gets created does not have an ID or a class (except the alternating row开发者_C百科s) so I don't see a way to access that element. I would like to use jQuery and call the .addClass() and .removeClass() methods on the rows, but I don't quite know how to access them. At this point I will take any solution ... so, is this something that is possible?

Thanks in advance for any help!


I ended up using the .ClientTemplate() to add a to a hidden element, then found the row it belongs to by finding the row's parent().parent().

Grid Razor:

@(Html.Telerik().Grid<Multimedia.Web.Models.GroupModel>()
    .Name("group-grid")
    .DataBinding(dataBinding => dataBinding.Ajax().Select("_GroupGridAjaxBinding", "TelerikControls"))

    .Columns(columns =>
    {
        columns.Bound(o => o.GroupNumber).Width("30%");
        columns.Bound(o => o.GroupName).Width("80%").Title("Name");
        columns.Bound(o => o.GroupNumber).Hidden(true).ClientTemplate("<div id='group-row-<#= GroupNumber#>'></div>"); //i will find this <td> by the <div> id
    })

   .Scrollable(scrolling => scrolling.Enabled(true))
   .Sortable(sorting => sorting.Enabled(true))
   .Pageable(paging => paging.Enabled(false))
   .Filterable(filtering => filtering.Enabled(false))
   .Groupable(grouping => grouping.Enabled(false))
   .Footer(false)
)

And then, in my JavaScript, I was able to access the table row using the following jQuery:

var groupNum = getGroupNumSomehow();
$('#group-row-' + groupNum).parent().parent().addClass('highlight');

And it worked!


You could always use the client-side row template and re-bind the grid when these external actions occur. Here's Telerik's example of the client-side row template to be used when doing ajax binding:

<%= Html.Telerik().Grid<Customer>()
   .Name("Grid")
   .DataBinding(dataBinding => dataBinding.Ajax().Select("Action", "Controller"))
   .Columns(columns =>
   {
       columns.Bound(c => c.CustomerID);
       columns.Bound(c => c.ContactName);
       columns.Bound(c => c.Country);
   })
   .ClientRowTemplate(grid => "<ul>" +
           "<li>CustomerID: <#= CustomerID #></li>" +
           "<li>Contact Name: <#= ContactName #></li>" +
           "<li>Country: <#= Country #></li>" +
        "</ul>" 
   )
%>

This might allow you to inject information into each row you can use to highlight.

More documentation about it on Telerik's site.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜