代码之家  ›  专栏  ›  技术社区  ›  Prisoner ZERO

回发时,我的用户控件中的转发器为空

  •  0
  • Prisoner ZERO  · 技术社区  · 15 年前

    所以这是。。。

    1. 页码
    2. …更新面板
    3. ……保存按钮
    4. ……中继器控制
    5. ………用户控制网格
    6. ………用户控制网格
    7. ……等等!

    <asp:Content ID="Content2" ContentPlaceHolderID="body" runat="server">
        <asp:UpdatePanel id="udPanel" UpdateMode="Always" runat="server">
                <Triggers>
                </Triggers>
                <ContentTemplate>
                   <uc:CommitImporterView ID="civData" runat="server" />
                </ContentTemplate>
        </asp:UpdatePanel>
    </asp:Content>
    
    public partial class CommitsAndActualsImporter : BaseForm
    {
        #region EVENTS
    
        protected void Page_Init(object sender, EventArgs e)
        {
            setUpEventHandlers();
    
            if (!IsPostBack)
                initalize();
        }
        protected void Page_Load(object sender, EventArgs e)
        {
        }
    
        protected void myListOfGroups_DataBinding(object sender, EventArgs e)
        {
            //.. Code to bind the list goes here ...
    
            myListOfGroups.SelectedIndex = setSelectedIndex(collection);
        }
        protected void myListOfGroups_SelectedIndexChanged(object sender, EventArgs e)
        {
            myGroup = myListOfGroups.Find(selectedItem => selectedItem.Key == key);
            dataSource = buildViewDataSource(base.ProjectKey, base.AsOf, myGroup.FcrGroupKey, myGroup.ContractorKey, myGroup.WbsKey);
    
            civData.AsOf = base.AsOf;
            civData.ProjectKey = base.ProjectKey;
            civData.DataSource = dataSource;
            civData.DataBind();
        }
    
        #endregion
    
        #region METHODS
    
        private void initalize()
        {
            ContractorInviteItems dataSource = listGroups(ProjectKey, AsOf);
            myListOfGroups.DataSource = dataSource;
            myListOfGroups.DataBind();
        }
        private void setUpEvents()
        {
            myListOfGroups.DataBinding += new EventHandler(myListOfGroups_DataBinding);
            myListOfGroups.SelectedIndexChanged += new EventHandler(myListOfGroups_SelectedIndexChanged);
        }
    
        #endregion
    }
    

    查看器用户控件如下所示

    <%@ Register Src="~/UserControls/CommitImporterGrid.ascx" TagName="CommitImporterGrid" TagPrefix="uc" %>
    
    <asp:Button ID="btnSave" runat="server" Text="Save" />
    
    <asp:HiddenField ID="hidAsOf" runat="server" Value="" />
    <asp:HiddenField ID="hidProjectKey" runat="server" Value="0" />
    
    <asp:Repeater ID="repCommitImporterView" runat="server">
        <ItemTemplate>
            <uc:CommitImporterGrid runat="server" />
        </ItemTemplate>
    </asp:Repeater>
    
    public partial class CommitImporterView : System.Web.UI.UserControl
    {
        #region PROPERTIES & FIELDS
    
        private enum basisUsed
        {
            Dollars,
            Hours,
            IsInvalid
        }
    
        public Object DataSource { get; set; }
    
        public DateTime AsOf { get { return Convert.ToDateTime(hidAsOf.Value); } set { hidAsOf.Value = value.ToString(); } }
        public Int32 ProjectKey { get { return Convert.ToInt32(hidProjectKey.Value); } set { hidProjectKey.Value = value.ToString(); } }
    
        #endregion
    
        #region EVENTS
    
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            setupEvents();
        }
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            this.DataBind();
        }
        protected override void OnPreRender(EventArgs e)
        {
            base.OnPreRender(e);
        }
    
        public override void DataBind()
        {
            base.DataBind();
        }
    
        protected void btnSave_Click(object sender, EventArgs e)
        {
            Int32 count = repCommitImporterView.Controls.Count;
    
            foreach (Control control in repCommitImporterView.Controls)
            {
                if (control is UserControls.CommitImporterGrid)
                {
                    string stop = "";
                }
    
            }
        }
    
        protected void repCommitImporterView_DataBinding(object sender, EventArgs e)
        {
            if (DataSource == null)
                return;
    
            if (!IsPostBack)
            {
                Decimal totalSummaryCbudDollars = 0;
                Decimal totalSummaryCbudHours = 0;
    
                if (summaryValuesExist(out totalSummaryCbudDollars, out totalSummaryCbudHours))
                    alignSummarizedRecords(totalSummaryCbudDollars, totalSummaryCbudHours);
    
                repCommitImporterView.DataSource = DataSource;
            }
        }
        protected void repCommitImporterView_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            ContractorInviteCommitsAndActualsImport record = (ContractorInviteCommitsAndActualsImport)e.Item.DataItem;
            CommitImporterGrid grid = new CommitImporterGrid();
            grid = (UserControls.CommitImporterGrid)Page.LoadControl("~/UserControls/CommitImporterGrid.ascx") as UserControls.CommitImporterGrid;
    
            grid.AsOf = this.AsOf;
            grid.ProjectKey = this.ProjectKey;
    
            grid.DataSource = getDataSource(record);
            grid.DataBind();
    
            repCommitImporterView.Controls.Add(grid);
        }
    
        #endregion
    
        #region METHODS
    
        private void setupEvents()
        {
            btnSave.Click += new EventHandler(btnSave_Click);
    
            repCommitImporterView.DataBinding += new EventHandler(repCommitImporterView_DataBinding);
            repCommitImporterView.ItemDataBound += new RepeaterItemEventHandler(repCommitImporterView_ItemDataBound);
        }
    
        #endregion
    }
    

    网格用户控件看起来像

    1 回复  |  直到 10 年前
        1
  •  1
  •   Dave Thieben    15 年前

    看起来只有在用户更改DropDownList时才绑定Viewer控件,而在页面/控件加载时(无论是在初始加载时还是在回发时),都不会绑定它。如果在回发时不绑定转发器,它将不会有任何您期望的数据项。

    myListOfGroups_SelectedIndexChanged 并从 myListOfGroups\u SelectedIndexChanged已更改 然后也从 Page_Load 不考虑 IsPostBack myListOfGroups ). 当你从 页面加载 ,它将从DropDownList中获取用户的选择,并重新绑定绑定转发器的Viewer控件。

    这里的关键点是,无论 IsPostBack公司 . 否则中继器里什么都没有。

    推荐文章