Child Grid not binding until I change pages on parent

3 posts, 0 answers
  1. Tech
    Tech avatar
    2 posts
    Member since:
    Jul 2015

    Posted 19 Oct Link to this post

    I have to say up front the page I'm working on was written by someone else and its all voodoo black magic to me, so I'm lost

    We have a loan status page on out web site (asp.net, Telerik version 2015.2.826.45)  which uses the RadGrid for the loans and a second Rad Grid for the history. The way it used to work is when you click on a loan it loaded the history. Some time back it would still work but ONLY after changing to page 2 or greater and going back to page 1.  

    I've attached screenshots
    * Step 1 navigate to the Loan Status page,
    * Step 2 change to any other data pages,
    * Step 3 go back to data page 1,
    * Step 4 Click a loan, history loads. 

    If you change databases pages the history grid keeps the last valid data instead of going blank

    Of possible technical importance is that all database calls are located in a separate class and not in the code behind

    In the code behind We have
    a dsLoan_Selecting which sets/changes a value in the ObjectDataSourceSelectingEventArgs
    a dsLoan_Selected which checks the number of rows returned if its greater than 50 it enables a warning message.

    One of our other pages did this same thing and I turned off paging all together and the problem went away. that did not happen on this page.

    I am including the ascx page code below
    Because we are working with financial data I removed any namespaces 

    I've never worked with Telerik controls before this and I don't have the best luck working with them with this application so ANY help would be greatly appreciated. 
    It's a simple page and I assume it a simple problem because after you page off and back it works fine...

    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ctlLTStatus.ascx.cs" Inherits="ctlLTStatus" %>

    <telerik:RadCodeBlock ID="StatusCodeBlock" runat="server">
        <script type="text/javascript">

            function StatusRowClick(sender, eventArgs) {
                var key = eventArgs.getDataKeyValue("ID");
                document.getElementById("<%= txtLTLoanID.ClientID %>").value = key;
                document.getElementById("<%= hidLoanID.ClientID %>").value = key;
                var detailTable = $find("<%= jdStatusDetail.ClientID %>").get_masterTableView();
                if (detailTable !== null) {
                    detailTable.rebind();
                }
                var prpcd = eventArgs.getDataKeyValue("PrepareCD");
                if (prpcd == 'False') {
                    document.getElementById("butGenClosingDisclosure").value = 'No Closing Disclosure';
                    document.getElementById("butGenClosingDisclosure").disabled = true;
                } else {
                    document.getElementById("butGenClosingDisclosure").value = 'Generate UCD XML';
                    document.getElementById("butGenClosingDisclosure").disabled = false;
                }
            }
        </script>
    </telerik:RadCodeBlock>

    <telerik:RadAjaxManagerProxy ID="AjaxproxyStatus" runat="server">
        <AjaxSettings>
            <telerik:AjaxSetting AjaxControlID="gridStatus">
                <UpdatedControls>
                    <telerik:AjaxUpdatedControl ControlID="jdStatusDetail" />
                </UpdatedControls>
            </telerik:AjaxSetting>
        </AjaxSettings>
    </telerik:RadAjaxManagerProxy>

    <asp:HiddenField ID="hidLoanID" runat="server" />
    <asp:HiddenField ID="hdnFileName" runat="server" />

    <telerik:RadAjaxPanel ID="StatusAjaxPanal" runat="server" LoadingPanelID="StatusLoading"  Width="100%" CssClass="CRAP2">
        <asp:Panel ID="pnlStatusDefaultButton" runat="server" DefaultButton="statussearchMaster">
            <asp:Panel ID="pnlStatusMessage" runat="server" Width="100%" BackColor="Yellow">
                <asp:Label ID="lblStatusMessage" runat="server" Text="&nbsp;&nbsp;&nbsp;&nbsp;You returned more than 50 results.  Not all loans are displayed, please limit your search" Font-Bold="False" Font-Size="Medium"></asp:Label>
            </asp:Panel>
            <telerik:RadToolBar ID="toolbarStatus" runat="server" Width="100%">
                <Items>
                    <telerik:RadToolBarButton runat="server" Text="Search">
                        <ItemTemplate>
                            &nbsp;&nbsp;BMG Invoice:<telerik:RadTextBox ID="txtStatusInvoice" runat="server" />
                            &nbsp;&nbsp;Name:<telerik:RadTextBox ID="txtStatusName" runat="server"></telerik:RadTextBox>
                            &nbsp;&nbsp;Loan Number:<telerik:RadTextBox ID="txtStatusLoanNumber" runat="server"></telerik:RadTextBox>
                            <telerik:RadButton ID="butStatusSearch" runat="server" Text="Search" OnClick="butStatusSearch_Click" BorderStyle="Solid" BorderColor="#c9c9c9" />
                            <span class="RadButton RadButton_Silk rbSkinnedButton">&nbsp;&nbsp;<input type="button" id="butGenClosingDisclosure" onclick="SetTab('ClosingDisclosure');" disabled="disabled" class="rbDecorated" style="display: inline" value="Select a Loan" /></span>
                        </ItemTemplate>
                    </telerik:RadToolBarButton>
                </Items>
            </telerik:RadToolBar>
            <telerik:RadGrid ID="gridStatus" AllowPaging="True" runat="server" AutoGenerateColumns="False" DataSourceID="dsStatus" Width="100%" Height="330px" GridLines="None" CellSpacing="0" AllowSorting="True" Skin="Metro">
                <ClientSettings ClientEvents-OnRowSelected="StatusRowClick">
                    <Selecting AllowRowSelect="true" />
                    <Scrolling AllowScroll="true" />
                </ClientSettings>
                <MasterTableView AllowSorting="True" DataSourceID="dsStatus" OverrideDataSourceControlSorting="True" DataKeyNames="ID, FileNumber, BorrowerName, LoanNumber" ClientDataKeyNames="ID,PrepareCD">
                    <RowIndicatorColumn FilterControlAltText="Filter RowIndicator column" />
                    <ExpandCollapseColumn FilterControlAltText="Filter ExpandColumn column" Visible="True" Created="True" />
                    <Columns>
                        <telerik:GridBoundColumn DataField="ID" HeaderText="ID" UniqueName="ID" Visible="False" />
                        <telerik:GridBoundColumn DataField="FileNumber" HeaderText="FileNumber" UniqueName="FileNumber" HeaderStyle-Width="150px" HeaderStyle-Wrap="False" />
                        <telerik:GridBoundColumn DataField="BorrowerName" HeaderText="BorrowerName" UniqueName="BorrowerName" HeaderStyle-Width="250px" HeaderStyle-Wrap="False" />
                        <telerik:GridBoundColumn DataField="LenderName" HeaderText="Lender" UniqueName="LenderName" HeaderStyle-Width="300px" />
                        <telerik:GridBoundColumn DataField="ReceivedDate" HeaderText="Received" UniqueName="ReceivedDate" HeaderStyle-Width="200px" />
                        <telerik:GridBoundColumn DataField="CheckedOutByName" HeaderText="CheckedOutBy" UniqueName="CheckedOutByName" HeaderStyle-Width="175px" />
                        <telerik:GridBoundColumn DataField="StatusDescription" HeaderText="Status" UniqueName="StatusDescription" />
                        <telerik:GridBoundColumn DataField="PrepareCD" HeaderText="PrePareCD" UniqueName="PrepareCD" Display="false" />
                    </Columns>
                    <PagerStyle PageSizeControlType="RadComboBox" />
                </MasterTableView>
                <HeaderStyle Font-Bold="True" />
                <PagerStyle PageSizeControlType="RadComboBox" />
                <FilterMenu EnableImageSprites="False">
                </FilterMenu>
            </telerik:RadGrid>
            <asp:ObjectDataSource ID="dsStatus" runat="server" SelectMethod="SelectLoansCompleteFromJetDocs" TypeName="DataHelper" OldValuesParameterFormatString="original_{0}" OnSelecting="dsStatus_Selecting" OnSelected="dsStatus_Selected">
                <SelectParameters>
                    <asp:Parameter DefaultValue="" Name="name" Type="String" />
                    <asp:Parameter DefaultValue="" Name="loanNumber" Type="String" />
                    <asp:Parameter DefaultValue="" Name="invoice" Type="String" />
                    <asp:Parameter DefaultValue="" Name="jdCompCode" Type="String" />
                </SelectParameters>
            </asp:ObjectDataSource>
            <asp:Button ID="statussearchMaster" runat="server" OnClick="butStatusSearch_Click" Text="SearchMaster" Style="height: 0px; visibility: hidden;" />
        </asp:Panel>
    </telerik:RadAjaxPanel>
    <telerik:RadAjaxPanel ID="ajaxStatusHistory" runat="server" LoadingPanelID="StatusLoading" Height="370" Width="100%" Visible="True" CssClass="CRAP">

        <telerik:RadGrid ID="jdStatusDetail" AllowPaging="false"  runat="server" Height="325px" AutoGenerateColumns="False" DataSourceID="dsStatusDetail" Width="100%" GridLines="None" CellSpacing="0" AllowSorting="True" Skin="Metro" CssClass="CRAP3" Visible="True">
            <ClientSettings>
                <Selecting AllowRowSelect="true" />
                <Scrolling AllowScroll="true" />
            </ClientSettings>
            <MasterTableView AllowSorting="True" DataSourceID="dsStatusDetail" OverrideDataSourceControlSorting="True" DataKeyNames="ID">
                <CommandItemSettings ExportToPdfText="Export to PDF" />
                <RowIndicatorColumn FilterControlAltText="Filter RowIndicator column" Visible="True">
                </RowIndicatorColumn>
                <ExpandCollapseColumn FilterControlAltText="Filter ExpandColumn column" Visible="True">
                </ExpandCollapseColumn>
                <Columns>
                    <telerik:GridBoundColumn Visible="false" DataField="ID" HeaderText="ID" UniqueName="ID" />
                    <telerik:GridBoundColumn HeaderStyle-Width="150px" DataField="Status" HeaderText="Status" UniqueName="Status" />
                    <telerik:GridBoundColumn HeaderStyle-Width="175px" DataField="BeginDate" HeaderText="BeginDate" UniqueName="BeginDate" />
                    <telerik:GridBoundColumn HeaderStyle-Width="175px" DataField="EndDate" HeaderText="EndDate" UniqueName="EndDate" />
                    <telerik:GridBoundColumn HeaderStyle-Width="150px" DataField="User"      HeaderText="Processor" UniqueName="User" />
                    <telerik:GridBoundColumn DataField="Notes" HeaderText="Notes" UniqueName="Notes" />
                </Columns>
                <EditFormSettings>
                    <EditColumn FilterControlAltText="Filter EditCommandColumn column">
                    </EditColumn>
                </EditFormSettings>
                <PagerStyle PageSizeControlType="RadComboBox" />
            </MasterTableView>
            <PagerStyle PageSizeControlType="RadComboBox" />
            <FilterMenu EnableImageSprites="False">
            </FilterMenu>
        </telerik:RadGrid>
        <asp:ObjectDataSource ID="dsStatusDetail" runat="server" SelectMethod="GetLTHistory" TypeName="DataHelper" OldValuesParameterFormatString="original_{0}">
            <SelectParameters>
                <asp:ControlParameter ControlID="txtLTLoanID" DefaultValue="0" Name="id" PropertyName="Value" Type="String" />
            </SelectParameters>
        </asp:ObjectDataSource>
        <asp:HiddenField ID="txtLTLoanID" runat="server" />
        <asp:HiddenField ID="txtLTPrefix" runat="server" />
        <asp:HiddenField ID="txtJDCompCode" runat="server" />
    </telerik:RadAjaxPanel>

    <telerik:RadAjaxLoadingPanel ID="StatusLoading" runat="server">
        Loading Please wait
    </telerik:RadAjaxLoadingPanel>



  2. Tech
    Tech avatar
    2 posts
    Member since:
    Jul 2015

    Posted 20 Oct Link to this post

    The Solution is simple and Stupid I have to force the data binding in the Page_Load in the code behind on the first load of the page

                    if (!Page.IsPostBack)
                    {
                        var grid = gridStatus;
                        if (gridStatus.Items.Count==0)
                        {
                            grid.DataBind();
                        }
                        var row = grid.Items[0];
                        var loan = (Loan)row.DataItem;
                        dsStatusDetail.SelectParameters[0].DefaultValue = loan.ID.ToString();
                        jdStatusDetail.DataBind();
                    }
  3. Attila Antal
    Admin
    Attila Antal avatar
    571 posts

    Posted 22 Oct Link to this post

    Hi,

    Simple data binding is not supported for Hierarchical Structure. This is mentioned in the Simple Data-binding article.

    RadGrid is an extended version of the asp:GridView and so it has its own binding technique, the Programmatic Data Binding Using the NeedDataSource Event. This page also has a Hierarchical data binding example in the Three level Hierarchy section.

    Regards,
    Attila Antal
    Progress Telerik

    Five days of Blazor, Angular, React, and Xamarin experts live-coding on twitch.tv/CodeItLive, special prizes, and more, for FREE?! Register now for DevReach 2.0(20).

Back to Top