从 JavaScript 获取 RadGrid 上 RadRating 的关联 ID
Obtain the associated Id for RadRating on RadGrid from JavaScript
我正在使用 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()
方法根本不 return 该行。我看到的是红鲱鱼。 get_parent
returns 是网格的父控件,然后查找它属于哪些行我找到了两个选项:
1) 获取HTML元素,遍历父节点直到找到行,得到rowIndex
。并使用该索引从网格中获取相应的 DataItem
。
var rowIndex = controlRating.get_element().parentNode.parentNode.rowIndex - 1;
2) 订阅grid的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
}
我正在使用 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()
方法根本不 return 该行。我看到的是红鲱鱼。 get_parent
returns 是网格的父控件,然后查找它属于哪些行我找到了两个选项:
1) 获取HTML元素,遍历父节点直到找到行,得到rowIndex
。并使用该索引从网格中获取相应的 DataItem
。
var rowIndex = controlRating.get_element().parentNode.parentNode.rowIndex - 1;
2) 订阅grid的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
}