2010-12-10 58 views
4

嗨,我是新的asp.net mvc和telerik控件。如何在点击行时获得o.Id值?telerik-grid onRow选择如何获取ID?

<%= Html.Telerik().Grid(Model)      
        .Name("RolesGrid") 
        .DataKeys(keys => keys.Add(o => o.Id))        
        .Selectable()      
        .Columns(columns => 
        { 
         columns.Bound(o => o.Name); 
         columns.Bound(o => o.Description); 

        }) 
        .Pageable()      
        .ClientEvents(events => events      
        .OnRowSelect("onRowSelect")) 

      %> 
在JS代码

function onRowSelect(e) { 
     var ordersGrid = $('#RolesGrid').data('tGrid'); 
     var row = e.row; 
     var dataItem = ordersGrid.dataItem(row); 
     alert(dataItem); 
    } 

但DataItem的是null,并且有值生成的html文件中没有ID。谢谢,我的英文不好

+0

http://www.telerik.com/help/aspnet-ajax/grid-onrowselected.html“get_gridDataItem()是不能直接使用的客户端除非上RowCreating/OnRowCreated事件被连接起来。这是为了优化目的而完成的。如果你需要rowIndex,你可以使用eventArgs.get_itemIndexHierarchical()“ – 2014-10-27 15:23:32

回答

12

所以,毕竟我得ID最好的办法是:

  1. 绑定onRowSelect功能,以网格
  2. 写下面的代码在onRowSelect

    var dataItem = jQuery('#MyGridId').data('tGrid').dataItem(e.row);  
    alert(dataItem['Id']); 
    

    DataItem的是地图女巫拥有网格模型的所有属性,所以你得到所有你想要的

这就是所有,谢谢

+0

您能澄清一下#Gridid和其他变量是什么? – Ammar 2012-05-30 20:19:36

+1

@Ammar Ahmed MyGridId它的网格标识符(在声明telerik网格时的网格名称,在OnRowSelect函数中的e参数) – 2012-05-31 06:30:09

+0

在问题中,网格似乎是服务器端,服务器端网格不支持dataItem。这就是我从Telerik技术支持读到的内容...... – Samuel 2012-08-16 13:18:25

0

变化对不起功能onRowSelect这样:

function onRowSelect(sender, args){...} 

将发件人的网格,并从ARGS你可以决定选择哪个项目。

看向Telerik的说明网站如何获得使用客户端API的数据的详细信息: http://www.telerik.com/help

+0

当我尝试显示警报(args);它的调用未定义的值,并帮助我看到只有一个参数为mvc网格OnRowSelect – 2010-12-10 13:11:56

+0

Apoligies ...我做了一个大假设网格的语法和AJAX控件一样,我打算把这个打到MVC专家,我在Telerik网站上读了一些关于网格的内容,看起来你的onRowSelect代码是正确的。从上面的代码我没有看到你将网格绑定到任何数据的位置 – ByteCrunchr 2010-12-10 23:34:15

+0

感谢您的回复生病尝试查找绑定数据 – 2010-12-12 18:54:54

10

telerik grid demo

您必须将ID放在telerik网格中作为隐藏列。

// ... 
.DataKeys(keys => keys.Add(o => o.Id))        
.Selectable() 
.Columns(columns => 
    { 
     columns.Bound(o => o.Id).Hidden(); 
     columns.Bound(o => o.Name); 
     columns.Bound(o => o.Description); 
    }) 
// ... 
.ClientEvents(events => events.OnRowSelect("onRowSelect")) 

,它将使一个

<td style="display: none; ...">...</td> 

然后你会得到这样的:

function onRowSelect(e) { 
    var id = e.row.cells[0].innerHTML; 
    // ... 
} 

注:

  • 我知道,这是丑陋的。
  • 我不知道为什么telerik会强制你调用.DataKeys(...)方法,如果没有记录的方法来获取定义的键的值。
  • 如果您使用分组或其他功能,它将变得更加棘手,因为隐藏列位置因分组安排而异。
+0

感谢您的答复生病它2个月前,但类似的方法)) – 2011-02-09 16:01:44

+0

@Sanja:对不起,最近的答案...我正在寻找一些类似的问题,当我b回到这个问题。 – mmutilva 2011-02-09 19:38:03

+1

虽然asp.net的telerik控件功能强大,但有时候定制更复杂的样本可能很困难。这个例子是现货。易如反掌! – 2011-10-06 09:29:13

1

我发现一个稍微更优雅的方式来做到这一点,借用mmutilva的答案。

开始通过将在隐藏列,并以同样的方式改变事件:

.DataKeys(keys => keys.Add(o => o.Id))        
.Selectable() 
.Columns(columns => 
    { 
     columns.Bound(o => o.Id).Hidden(); 
     columns.Bound(o => o.Name); 
     columns.Bound(o => o.Description); 
    }) 
.ClientEvents(events => events.OnRowSelect("onRowSelect")) 

但随后在javascript函数,有一个更好的方式来实际选择的对象,然后隐藏的行:

function onRowSelect(e) { 
     var grid = e.sender; 
     var currentitem = grid.dataItem(this.select()); 
     var Id = currentitem.Id; 
     //then do whatever with the ID variable 
    } 

Source