This is a migrated thread and some comments may be shown as answers.

Child Grid not binding until I change pages on parent

2 Answers 59 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Tech
Top achievements
Rank 1
Tech asked on 19 Oct 2020, 10:03 PM
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 Answers, 1 is accepted

Sort by
0
Tech
Top achievements
Rank 1
answered on 20 Oct 2020, 04:20 PM
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();
                }
0
Attila Antal
Telerik team
answered on 22 Oct 2020, 06:03 PM

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).

Tags
Grid
Asked by
Tech
Top achievements
Rank 1
Answers by
Tech
Top achievements
Rank 1
Attila Antal
Telerik team
Share this question
or