2010-12-10 83 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