从JavaScript中获取RadGrid上RadRating的关联Id

Obtain the associated Id for RadRating on RadGrid from JavaScript

本文关键字:RadRating 关联 Id RadGrid JavaScript 获取      更新时间:2023-09-26

我使用的是Telerik的ASP.NET AJAX库,RadGrid中的每一行都有一个RadRating元素,并且需要获取RadRating被评级的行的关联Id(但使用Javascript),但是get_parent()方法返回的是网格引用,而不是行。

如何获取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>

这就是我的发现。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();
}

更新: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
}