2014-10-02 93 views
1

我有一個可擴展行的RadGrid,其中每個擴展的NestedViewTemplate都包含一個RadGrid。孩子RadGrids有一個明顯的尾和幾列(我已經包括了一個「DtlTransAmount」):在NestedViewTemplate中訪問子RadGrid頁腳

<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控件在他們的 「DtlTransAmount」 列類似

總額底部:$ 10.00

現在我需要通過JavaScript調整此總和值(「10.00」),當子RadGrid中的任何文本框單元失去焦點(因爲用戶已更改金額值)。我可以成功調用與調用對象的單個輸入參數的功能,但他們說我不知道​​該怎麼做:

function detailAmountUpdate(obj) { 
    // alert("Made it here at least..."); 
    // no idea what to do now. 
} 

舉例來說,如果我有3個擴展行(所以3子radgrid控件的可見)並且我從第二行的子RadGrid中的文本框中不重點關注,如何更新該子項RadGrid的頁腳中的標籤?像getElementsByTagName或Telerik API函數(如get_nestedViews)的所有DOM函數都返回空或未定義或爲空。

回答

1

我能夠通過JavaScript直接編輯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");