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

RabTabStrip and grid in pageView

1 Answer 69 Views
TabStrip
This is a migrated thread and some comments may be shown as answers.
MBEN
Top achievements
Rank 2
Veteran
MBEN asked on 16 Jun 2014, 06:24 PM
I am using RadTabStrip as a wizard.
On one of the page views I have usercontrol that loads a grid. I calculate the footer total on one of the columns in ItemDatabound event.
If I move to a previous tab and then come back to the tab with the grid, I notice that my Itemdatabound event is called twice and henece my total gets doubled up.

I can't figure out why the ItemdataBound event is fired twice.

<%@ Page Language="C#" MasterPageFile="~/enrollment/enrollmentWizard.master" AutoEventWireup="true"
    CodeFile="EDCP.aspx.cs" Inherits="enrollment_theCompany_EDCP" Title="M Benefit Solutions: The Comapny Enrollment" %>
 
<%@ MasterType VirtualPath="~/enrollment/enrollmentWizard.master" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<%@ Register TagPrefix="iSys" TagName="summary" Src="~/enrollment/ucEnrollmentSummary.ascx" %>
<%@ Register TagPrefix="iSys" TagName="fundBucket" Src="~/fund/ucFundbucket.ascx" %>
<%@ Register TagPrefix="iSys" TagName="deferralElections" Src="~/enrollment/thecompany/deferralElections.ascx" %>
<%@ Register TagPrefix="iSys" TagName="paymentOptions" Src="~/enrollment/thecompany/paymentOptions.ascx" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder2" runat="Server">
    <telerik:RadAjaxManagerProxy ID="RadAjaxManager1" runat="server">
        <AjaxSettings>
            <telerik:AjaxSetting AjaxControlID="rmpEnrollment">
                <UpdatedControls>
                    <telerik:AjaxUpdatedControl ControlID="rtsEnrollment" />
                    <telerik:AjaxUpdatedControl ControlID="rmpEnrollment" />
                </UpdatedControls>
            </telerik:AjaxSetting>
            <telerik:AjaxSetting AjaxControlID="rtsEnrollment">
                <UpdatedControls>
                    <telerik:AjaxUpdatedControl ControlID="rtsEnrollment" />
                    <telerik:AjaxUpdatedControl ControlID="rmpEnrollment" />
                </UpdatedControls>
            </telerik:AjaxSetting>
        </AjaxSettings>
    </telerik:RadAjaxManagerProxy>
    <table cellpadding="0" cellspacing="0" width="100%">
        <tr>
            <td>
                <telerik:RadTabStrip ID="rtsEnrollment" runat="server" MultiPageID="rmpEnrollment"
                    OnTabClick="rtsEnrollment_TabClick" SelectedIndex="0" CausesValidation="true"
                    Align="Justify" AutoPostBack="true">
                </telerik:RadTabStrip>
                <telerik:RadMultiPage ID="rmpEnrollment" runat="server" SelectedIndex="0" OnPageViewCreated="rmpEnrollment_PageViewCreated"
                    OnPreRender="rmpEnrollment_PreRender" RenderSelectedPageOnly="true" CssClass="multiPage">
                </telerik:RadMultiPage>
            </td>
        </tr>
    </table>
</asp:Content>
 
aspx.cs
 
public partial class enrollment_theCompany_EDCP : EnrollmentBasePage
{
    protected override void LoadStep()
    {
        string tabName = rtsEnrollment.SelectedTab.Text;
        RadTab tab = rtsEnrollment.FindTabByText(tabName);
 
        switch (rtsEnrollment.SelectedTab.Text)
        {
            case "Deferral Elections":
                break;
 
            case "Distribution Elections":
                break;
 
            case "Fund Allocations":
                RadPageView pvFundAllocations = (RadPageView)tab.PageView.FindControl("fundAllocations");
                ucFundBucket ucFundAllocations = (ucFundBucket)pvFundAllocations.FindControl("ucFundAllocations");
                ucFundAllocations.LoadPlan();
                break;
 
            case "Enrollment Summary":
                // commit data
                break;
        }
    }
 
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            AddTab("Deferral Elections", true);
 
            RadPageView pageView = new RadPageView();
            pageView.ID = "DeferralElections";
            rmpEnrollment.PageViews.Add(pageView);
 
            AddTab("Distribution Elections", false);
            AddTab("Fund Allocations", false);
            AddTab("Enrollment Summary", false);
 
            LoadStep();
        }      
    }
 
    #region UI Events
 
    protected void rmpEnrollment_PreRender(object sender, EventArgs e)
    {
        LoadStep();
    }
 
    protected void rmpEnrollment_PageViewCreated(object sender, RadMultiPageEventArgs e)
    {
        Control pageViewContents = new Control();
        //code
    }
    protected void rtsEnrollment_TabClick(object sender, RadTabStripEventArgs e)
    {
        Page.Validate(rtsEnrollment.ValidationGroup);
        if (Page.IsValid)
            rtsEnrollment.ValidationGroup = e.Tab.Value;
 
        LoadStep();       
    }
    protected void PreviousButton_Click(object sender, EventArgs e)
    {
    }
    protected void ContinueButton_Click(object sender, EventArgs e)
    {
    }
    protected void FinishButton_Click(object sender, EventArgs e)
    {
    }   
    #endregion
}
 
.ascx for Fund Allocations
 
<%@ Control Language="c#" Inherits="iSys.fund.ucFundBucket" CodeFile="ucFundbucket.ascx.cs" %>
<%@ Register TagPrefix="iSys" TagName="pieChart" Src="~/Common/ucPieChart.ascx" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<table width="100%" cellspacing="0" cellpadding="0" border="0">
    <telerik:RadAjaxManagerProxy ID="RadAJAXManagerProxy1" runat="server">
        <AjaxSettings>
            <telerik:AjaxSetting AjaxControlID="rgFunds">
                <UpdatedControls>
                    <telerik:AjaxUpdatedControl ControlID="_successfulPostMessage" />
                    <telerik:AjaxUpdatedControl ControlID="rgFunds" LoadingPanelID="RadAjaxLoadingPanel1" />
                    <telerik:AjaxUpdatedControl ControlID="_fundsPanel" />
                </UpdatedControls>
            </telerik:AjaxSetting>
        </AjaxSettings>
    </telerik:RadAjaxManagerProxy>
    <asp:PlaceHolder ID="_allocationPanel" runat="server">
        
        <asp:PlaceHolder ID="_fundsPanel" runat="server" Visible="true">
            <tr valign="top">
                <td align="left" style="width: 50%" rowspan="2">
                    <telerik:RadGrid ID="rgFunds" runat="server" AllowSorting="False" EnableViewState="true" AllowPaging="false"
                         GridLines="Both" AllowMultiRowEdit="true" OnPreRender="rgFunds_PreRender" OnItemDataBound="rgFunds_ItemDataBound"
                        OnItemCreated="rgFunds_ItemCreated" OnItemCommand="rgFunds_ItemCommand" OnNeedDataSource="rgFunds_NeedDataSource">
                        <MasterTableView TableLayout="Fixed" HierarchyDefaultExpanded="true" CommandItemDisplay="Bottom"
                            EditMode="InPlace" EnableNoRecordsTemplate="true">
                            <CommandItemTemplate>
                                <table width="100%">
                                    <tr>
                                        <td colspan="4" align="left">
                                            <asp:CheckBox ID="chkAutoRebalance" runat="server" Visible="false" CssClass="checkbox"
                                                OnCheckedChanged="chkAutoRebalance_CheckedChanged" />
                                        </td>
                                        <td align="right">
                                            <asp:Button ID="btnPostTransaction" runat="server" Text="Post Transaction" CssClass="button"
                                                CommandName="PostTransaction" />
                                        </td>
                                    </tr>
                                </table>
                            </CommandItemTemplate>
                            <Columns>
                                <telerik:GridTemplateColumn ItemStyle-HorizontalAlign="Left" HeaderStyle-HorizontalAlign="Left"
                                    FooterStyle-HorizontalAlign="Left" UniqueName="InvestmentOptions" ReadOnly="true"
                                    HeaderText="Investment Options">
                                    <ItemTemplate>
                                        <asp:HyperLink ID="_pdfLink" runat="server" ImageUrl="~/App_Themes/Images/pdf_icon.gif"
                                            Visible="false" />
                                        <asp:Label ID="_color" runat="server">    </asp:Label>
                                        <asp:Label ID="_fundName" runat="server" Text='<%# Eval("fundName")%>'></asp:Label>
                                        <asp:CheckBox ID="_excludeFund" runat="server" Checked='<%# Eval("allowRebalanceExclude")%>'
                                            Text="Exclude?" Visible='<%# Eval("allowRebalanceExclude")%>' />
                                        <input type="hidden" id="_fundID" runat="server" />
                                        <input type="hidden" id="_autoRebalanceFlag" runat="server" />
                                        <input type="hidden" id="_allowRebalance" runat="server" />
                                    </ItemTemplate>
                                    <FooterTemplate>
                                        <strong>Total must equal 100%</strong></FooterTemplate>
                                </telerik:GridTemplateColumn>
                                <telerik:GridTemplateColumn ItemStyle-HorizontalAlign="Right" HeaderText="Current %"
                                    HeaderStyle-Width="20%" ReadOnly="true" DataField="currentPercent" UniqueName="currentPercent">
                                    <ItemTemplate>
                                        <asp:Label ID="_currentPercent" runat="server" Text='<%# Eval("currentPercent", "{0:N2}%")%>'>
                                        </asp:Label></ItemTemplate>
                                    <%--<FooterTemplate>
                                        <asp:Label ID="fundTotalOld" runat="server" />%
                                    </FooterTemplate>--%>
                                </telerik:GridTemplateColumn>
                                <telerik:GridTemplateColumn ItemStyle-HorizontalAlign="Right" UniqueName="futurePercent"
                                    HeaderStyle-Width="20%" HeaderText="New %">
                                    <ItemTemplate>
                                        <asp:Label ID="_futurePercent" runat="server" Text='<%# Eval("futurePercent", "{0:N2}%")%>'></asp:Label>
                                    </ItemTemplate>
                                    <EditItemTemplate>
                                        <asp:TextBox ID="txtNewPercent" runat="server" CssClass="percent" groupName="allocations"
                                            Width="40px" onchange="SumGroup(this, false)" Text='<%# Eval("futurePercent")%>' />
                                        %
                                        <asp:RangeValidator ID="newPercentageRange" runat="server" ControlToValidate="txtNewPercent"
                                            Type="Integer" CssClass="errormessagesmall" Display="None" />
                                        <asp:CustomValidator ID="newPercentageIncrement" runat="server" ControlToValidate="txtNewPercent"
                                            ClientValidationFunction="Mod_ClientValidate" CssClass="errormessagesmall" Display="None" />
                                        <cc1:ValidatorCalloutExtender ID="newPercentageRangeCallout" runat="server" TargetControlID="newPercentageRange"
                                            Width="235px" />
                                        <cc1:ValidatorCalloutExtender ID="newPercentageIncrementCallout" runat="server" TargetControlID="newPercentageIncrement"
                                            Width="235px" />
                                    </EditItemTemplate>
                                    <FooterTemplate>
                                        <asp:TextBox ID="fundTotal" runat="server" CssClass="percent" onfocus="blur()" Enabled="false"
                                            Font-Bold="true" ForeColor="Black" Width="40px" />
                                        %
                                        <asp:CompareValidator ID="totalEqual100" runat="server" ControlToValidate="fundTotal"
                                            ValueToCompare="100" Operator="Equal" CssClass="errormessagesmall" Display="None"
                                            ErrorMessage="New allocations must total 100%." />
                                        <asp:RequiredFieldValidator ID="fundTotalRequired" runat="server" ControlToValidate="fundTotal"
                                            Display="None" Visible="false" ErrorMessage="You <em>must</em> enter an allocation." />
                                        <cc1:ValidatorCalloutExtender ID="fundTotalRequiredCallout" runat="server" TargetControlID="fundTotalRequired"
                                            Width="235px" />
                                        <cc1:ValidatorCalloutExtender ID="totalEqual100Callout" runat="server" TargetControlID="totalEqual100"
                                            Width="235px" />
                                    </FooterTemplate>
                                </telerik:GridTemplateColumn>
                            </Columns>
                        </MasterTableView>
                    </telerik:RadGrid>
                </td>
            </tr>
        </asp:PlaceHolder>
</table>
 
.ascx.cs
 
    public partial class ucFundBucket : userControl
    {
         
        public void LoadPlan()
        {  
            rgFunds.Rebind();
        }       
 
        /// <summary>
        /// Loads the percents table and the charts
        /// </summary>
        private void DrawPie()
        {
            DateTime today = DateTime.Now;
            DataTable dt;
            DataView dv, dvFuture;
            if (_allocationType == FundAllocation.AllocationType.Rebalance)
            {
                //code
            }
            else
            {
                //code
            }        
 
            // bind to grid
            rgFunds.DataSource = dt;
        }
 
        protected void rgFunds_ItemCommand(object source, GridCommandEventArgs e)
        {
            if (e.CommandName == "PostTransaction")
            {
                //code
            }
        }
 
        protected void rgFunds_PreRender(object source, EventArgs e)
        {
            // only visible if is the actual employee
            btnPostTransaction.Visible = (ShowPostTransactionButton && IsCurrentEmployee);
 
            //Puts the grid in editmode
                foreach (GridItem item in rgFunds.MasterTableView.Items)
                {
                    if (item is GridEditableItem)
                    {
                        GridEditableItem editableItem = item as GridDataItem;
                        editableItem.Edit = true;
                    }
                }
                rgFunds.Rebind();           
 
            // Add the attribute to the fundTotal textbox
            GridItem gridFooterItem = rgFunds.MasterTableView.GetItems(GridItemType.Footer)[0];
            TextBox fundTotal = (TextBox)gridFooterItem.FindControl("fundTotal");
 
            GridItem[] gridEditItem = rgFunds.MasterTableView.GetItems(GridItemType.EditItem);
            if (gridEditItem.Count() > 0)
            {
                foreach (GridItem item in gridEditItem)
                {
                    TextBox txtNewPercent = item.FindControl("txtNewPercent") as TextBox;
                    txtNewPercent.Attributes.Add("totalName", fundTotal.ClientID);
                }
            }
        }
 
        protected void rgFunds_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
        {
            DrawPie();
        }
 
        protected void rgFunds_ItemCreated(object sender, GridItemEventArgs e)
        {
           //code
        }
 
        protected void rgFunds_ItemDataBound(object source, GridItemEventArgs e)
        {
            if (e.Item is GridDataItem && e.Item.IsInEditMode)
            {
                GridDataItem item = (GridDataItem)e.Item;
                DataRowView view = (DataRowView)item.DataItem;
                
                //some code      
 
                TextBox txtNewPercent = (TextBox)item["futurePercent"].FindControl("txtNewPercent");
                string newPercent = txtNewPercent.Text.Replace("%", "");               
 
                _futureTotals += Double.Parse((newPercent == "") ? "0" : newPercent);
            }
            if (e.Item is GridFooterItem )
            {
                GridFooterItem footerItem = (GridFooterItem)e.Item;              
 
                TextBox fundTotal = (TextBox)footerItem["futurePercent"].FindControl("fundTotal");
                fundTotal.Text = (_futureTotals > 0) ? _futureTotals.ToString() : "";
 
                // require a future allocation if previous is zero
                RequiredFieldValidator fundTotalRequired = (RequiredFieldValidator)footerItem["futurePercent"].FindControl("fundTotalRequired");
                fundTotalRequired.Visible = ((_allocationType == FundAllocation.AllocationType.Future) && (_currentTotals == 0));              
            }
        }
    }
}


1 Answer, 1 is accepted

Sort by
0
Nencho
Telerik team
answered on 19 Jun 2014, 11:40 AM
Hello,

I have inspected the provided code snippet and I noticed that you are calling the LoadStep twice - at the TabClick and at the PageView's PreRender events. Thus the rgFunds.Rebind() is called twice and probably this is the reason for the double call of the ItemDataBound event of the RadGrid. Please consider using the LoadStep method only once and test the behavior.

Regards,
Nencho
Telerik
 

Check out the Telerik Platform - the only platform that combines a rich set of UI tools with powerful cloud services to develop web, hybrid and native mobile apps.

 
Tags
TabStrip
Asked by
MBEN
Top achievements
Rank 2
Veteran
Answers by
Nencho
Telerik team
Share this question
or