2015-12-21 76 views
0

我正在使用Telerik的ASP.NET AJAX庫,並且我爲RadGrid中的每一行都有一個RadRating元素,並且需要獲取RadRating所在行的關聯Id被評爲(但帶有Javascript),但是,get_parent()方法正在返回網格引用而不是行。從JavaScript獲取RadGrid RadRrid的關聯Id

如何獲得RadRating行的GridDataItem

下面的代碼有時候並不是所有的時候都有效。我究竟做錯了什麼?

<script type="text/javascript"> 
    (function(global,undefined) { 

     function OnClientRating(controlRating,args) { 
      var row = controlRating.get_parent(); 
      var userId = row.getDataKeyValue("UserId"); 
     } 

     global.OnClientRating = OnClientRating; 

    })(window); 
</script> 

<rad:RadGrid runat="server" ID="gridUsers" Skin="Hay" 
      EnableAJAX="False" 
      AutoGenerateColumns="False" 
      GridLines="Both" 
      Width="100%" 
      AllowSorting="True" 
      OnItemDataBound="Grid_ItemDataBound"> 
    <MasterTableView DataKeyNames="UserId" ClientDataKeyNames="UserId"> 
     <Columns> 
      <rad:GridTemplateColumn HeaderText="Name" HeaderStyle-Width="180px" ItemStyle-Width="180px"> 
       <ItemTemplate> 
        <%# Eval("FullName")%> 
       </ItemTemplate> 
      </rad:GridTemplateColumn> 
      <rad:GridTemplateColumn HeaderText="Rating" HeaderStyle-Width="100px" ItemStyle-Width="100px"> 
       <ItemTemplate> 
        <rad:RadRating ID="ratAppraiserRating" runat="server" ItemCount="5" Value='<%# Eval("AverageRating")%>' 
         SelectionMode="Continuous" Precision="Item" Orientation="Horizontal" OnClientRating="OnClientRating" 
         OnRate="RatRating_Rate" AutoPostBack="true" /> 
       </ItemTemplate> 
      </rad:GridTemplateColumn> 
      </Columns> 
    </MasterTableView> 
    <ClientSettings> 
     <Scrolling UseStaticHeaders="false" ScrollHeight="240px" AllowScroll="true" /> 
     <Selecting AllowRowSelect="false" /> 
     <ClientEvents OnRowDblClick="selectRow" /> 
    </ClientSettings> 
</rad:RadGrid> 
+0

哪裏是'get_parent()'的聲明? –

+0

@AndrueAnderson get_parent()是Javascript中的RadRating對象的一種方法。事實上,Rad控件中的每個控件都可以使用 –

+0

我向你保證JavaScript中沒有RadRating對象,也許你是指一些框架或API? –

回答

0

這就是我發現的。 get_parent()方法根本不返回該行。我所看到的是紅鯡魚。 get_parent返回父控件,它是網格,然後找到它屬於哪個行,我發現了兩個選項:

1)獲取HTML元素並遍歷父節點,直到找到行並獲取rowIndex。並使用該索引從網格中獲取各自的DataItem

var rowIndex = controlRating.get_element().parentNode.parentNode.rowIndex - 1; 

2)訂閱OnRowMouseOver事件的網格,並保持DataGridItem的參考,並用它真正需要的時候。

var currentDataItem = undefined; 

function onRowMouseOver(sender, eventArgs) { 
    currentDataItem = eventArgs.get_gridDataItem(); 
} 

UPDATE:Telerik的人提出了第三種選擇

3)

function OnClientRating(sender, args) { 


    var parentTableView = sender.get_parent(); 
    var rowID = $telerik.$(sender.get_element()).closest("tr")[0].id; 
    var rowIndex = rowID.split("__")[1]; 

    var dataItem = parentTableView.get_dataItems()[rowIndex]; 

    var someCellText = dataItem.get_cell("ColumnUniqueName").innerHTML; 

    // add custom logic here 

} 
相關問題