在NestedViewTemplate中访问子RadGrid页脚

时间:2014-10-02 17:18:39

标签: javascript c# asp.net telerik radgrid

我有一个带可扩展行的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。

1 个答案:

答案 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>&nbsp;</td><td>Total Amount: $</td><td>123.45</td>
                <td>Remaining: $</td><td>0.00</td><td>&nbsp;</td><td>&nbsp;</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");
相关问题