我有一个带可扩展行的RadGrid,每个展开的NestedViewTemplate
都包含一个RadGrid。孩子RadGrids有一个可见的页脚和几列(我已经包括一个," DtlTransAmount"):
<NestedViewTemplate>
<asp:Panel ID="pnDetailItems" runat="server" >
<telerik:RadGrid ID="rgDetailItems" runat="server" ShowFooter="true" Width="1675px" AutoGenerateColumns="false" AllowPaging="false"
OnItemDataBound="rgDetailItems_ItemDataBound" ... >
<MasterTableView>
<Columns>
<telerik:GridBoundColumn HeaderText="Amount" DataField="DtlTransAmount" UniqueName="DtlTransAmount" SortExpression="DtlTransAmount"
HeaderStyle-Width="20px" ItemStyle-Width="20px" FilterControlWidth="20px" DataFormatString="{0:$0.00}"/>
我在后面的代码中的ItemDataBound事件中设置每个子RadGrid的页脚文本:
private void rgDetailItemsItemDataBound(object sender, GridItemEventArgs e)
{
var foot = e.Item as GridFooterItem;
var r = sender as RadGrid;
foot["DtlTransAmount"].Text = "Total Amount: $" + GetMainSumFromDetailRadGrid(r);
//...
这使得每个孩子RadGrid都在他们的&#34; DtlTransAmount&#34;的底部。列类似
总金额:10.00美元
现在,当子RadGrid中的任何文本框单元失去焦点时(因为用户已更改了数值),我需要通过JavaScript调整此总和值(&#34; 10.00&#34;)。我可以使用调用对象的单个输入参数成功调用函数,但是他们不知道该怎么做:
function detailAmountUpdate(obj) {
// alert("Made it here at least...");
// no idea what to do now.
}
例如,如果我有3个展开的行(因此3个子RadGrid可见),并且我从第2行的子RadGrid中的文本框中取消聚焦,如何更新页脚中的标签孩子RadGrid?所有DOM函数(如getElementsByTagName
或Telerik API函数,如get_nestedViews
都返回空或未定义或null。
答案 0 :(得分:1)
我可以通过直接编辑HTML来更新页脚文本。请记住,RadGrid实际上只是一个带有一些样式的HTML表。我的RadGrid在源头看起来如下:
<div tabindex="0" class="RadGrid RadGrid_Default"
id="ucP_RadGrid1_ctl00_ctl05_rgDetailItems" style="width: 1675px;">
<table class="rgMasterTable" id="ucP_RadGrid1_ctl00_ctl05_rgDetailItems_ctl00"
style="width: 100%; table-layout: auto; empty-cells: show;">
...
<tfoot>
<tr class="rgFooter">
<td> </td><td>Total Amount: $</td><td>123.45</td>
<td>Remaining: $</td><td>0.00</td><td> </td><td> </td>
</tr>
</tfoot>
...
关键是让孩子RadGrid的HTML节点并从那里找到页脚。有很多方法可以获得该主节点,但这是我在我的函数中做到的方式:
var rgNode = obj.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode;
您可以访问页脚的HTML并使用以下内容获取值:
var markup = rgNode.getElementsByTagName("tfoot")[0].innerHTML;
var amountTotal = markup.split("<td>")[3].replace("</td>", "").trim();
现在变量amountTotal
是“10.00”。
最后,替换HTML中的值,将“10.00”交换为某个新值。这很难看,但它确实有效:
rgNode.getElementsByTagName("tfoot")[0].innerHTML =
markup.replace("Amount: $</td><td>" + amountTotal, "Amount: $</td><td>15.00");