explanation of when need to repopulate control

Discussion in 'ASP .Net Building Controls' started by TS, Aug 2, 2005.

  1. TS

    TS Guest

    So what is happening is the same thing that was happening, the top most
    parent's event handler is called correctly, but its child's event is
    envoking the parent's event handler (the same one).

     
    TS, Aug 16, 2005
    #21
    1. Advertisements

  2. Hi TS,

    You can mail me through the address by removing the "online" in the address
    of my signature.

    Thanks,

    Steven Cheng
    Microsoft Online Support

    Get Secure! www.microsoft.com/security
    (This posting is provided "AS IS", with no warranties, and confers no
    rights.)
    --------------------
    | From: "TS" <>
    | References: <>
    <>
    <2rQIZ7$>
    <>
    <unRs#>
    <>
    <#>
    <$>
    <#>
    <>
    <>
    <>
    <>
    | Subject: Re: explanation of when need to repopulate control
    | Date: Tue, 16 Aug 2005 15:44:51 -0500
    | Lines: 1635
    | X-Priority: 3
    | X-MSMail-Priority: Normal
    | X-Newsreader: Microsoft Outlook Express 6.00.2800.1158
    | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
    | Message-ID: <#>
    | Newsgroups: microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | NNTP-Posting-Host: 101nat080.tea.state.tx.us 198.214.101.80
    | Path: TK2MSFTNGXA01.phx.gbl!TK2MSFTNGP08.phx.gbl!TK2MSFTNGP10.phx.gbl
    | Xref: TK2MSFTNGXA01.phx.gbl
    microsoft.public.dotnet.framework.aspnet.buildingcontrols:4058
    | X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.buildingcontrols
    |
    | So what is happening is the same thing that was happening, the top most
    | parent's event handler is called correctly, but its child's event is
    | envoking the parent's event handler (the same one).
    |
    | | > Hey Steven, I have a problem while working with the same DataList
    control.
    | > That one problem that caused the wrong event handler to get called is
    | > happening now. I am working on a different project using the same
    control
    | > that i got finished on the other project and trying to implement on this
    | new
    | > project, and it is set up almost the same. The only difference is that
    on
    | > this new one, i have added a postback step before the custom datalist
    gets
    | > loaded.
    | >
    | > Any ideas as why the wrong event handler is getting called?
    | >
    | > thanks
    | >
    | > | > > You're welcome TS.
    | > >
    | > > Glad that you've overcome the problem.
    | > >
    | > > Regards,
    | > >
    | > > Steven Cheng
    | > > Microsoft Online Support
    | > >
    | > > Get Secure! www.microsoft.com/security
    | > > (This posting is provided "AS IS", with no warranties, and confers no
    | > > rights.)
    | > > --------------------
    | > > | From: "TS" <>
    | > > | References: <>
    | > > <>
    | > > <2rQIZ7$>
    | > > <>
    | > > <unRs#>
    | > > <>
    | > > <#>
    | > > <$>
    | > > <#>
    | > > <>
    | > > | Subject: Re: explanation of when need to repopulate control
    | > > | Date: Mon, 8 Aug 2005 12:50:32 -0500
    | > > | Lines: 1445
    | > > | X-Priority: 3
    | > > | X-MSMail-Priority: Normal
    | > > | X-Newsreader: Microsoft Outlook Express 6.00.2800.1158
    | > > | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
    | > > | Message-ID: <>
    | > > | Newsgroups:
    microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | > > | NNTP-Posting-Host: 103nat100.tea.state.tx.us 198.214.103.100
    | > > | Path:
    TK2MSFTNGXA01.phx.gbl!TK2MSFTNGP08.phx.gbl!TK2MSFTNGP10.phx.gbl
    | > > | Xref: TK2MSFTNGXA01.phx.gbl
    | > > microsoft.public.dotnet.framework.aspnet.buildingcontrols:4014
    | > > | X-Tomcat-NG:
    microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | > > |
    | > > | Well you were right that it had something to do with the custom
    | control.
    | > > The
    | > > | datalist was trying to load itself during page load. i put the code
    in
    | > > Init,
    | > > | and it worked.
    | > > |
    | > > | thanks steven
    | > > |
    | > > | | > > | > Thanks for your followup TS.
    | > > | >
    | > > | > So can I say that currently your custom webcontrol(not template
    list
    | > > | > control) can correctly be added both statically and dynamically in
    | the
    | > > | > normal DataList or Repeater controls (asp.net buildin ) , but
    have
    | > some
    | > > | > problem for postback events when added in your custom list
    control?
    | > > | >
    | > > | > If so, we should keep focus on the custom datalist control. Has it
    | any
    | > > | > problems when we nest some asp.net buildin controls in it? Would
    you
    | > try
    | > > | > making a simplified version of your custom datalist control so
    that
    | we
    | > > can
    | > > | > have a view to see whether there is anything wrong in it. Also,
    | it'll
    | > be
    | > > | > helpful you also provide the complete code that you dynamically
    add
    | > > | control
    | > > | > into the datalist (through reflection).
    | > > | >
    | > > | > Thanks,
    | > > | >
    | > > | > Steven Cheng
    | > > | > Microsoft Online Support
    | > > | >
    | > > | > Get Secure! www.microsoft.com/security
    | > > | > (This posting is provided "AS IS", with no warranties, and confers
    | no
    | > > | > rights.)
    | > > | >
    | > > | > --------------------
    | > > | > | From: "TS" <>
    | > > | > | References: <>
    | > > | > <>
    | > > | > <2rQIZ7$>
    | > > | > <>
    | > > | > <unRs#>
    | > > | > <>
    | > > | > <#>
    | > > | > <$>
    | > > | > | Subject: Re: explanation of when need to repopulate control
    | > > | > | Date: Fri, 5 Aug 2005 17:19:23 -0500
    | > > | > | Lines: 1298
    | > > | > | X-Priority: 3
    | > > | > | X-MSMail-Priority: Normal
    | > > | > | X-Newsreader: Microsoft Outlook Express 6.00.2800.1158
    | > > | > | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
    | > > | > | Message-ID: <#>
    | > > | > | Newsgroups:
    | > microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | > > | > | NNTP-Posting-Host: 103nat100.tea.state.tx.us 198.214.103.100
    | > > | > | Path:
    | > TK2MSFTNGXA01.phx.gbl!TK2MSFTNGP08.phx.gbl!TK2MSFTNGP15.phx.gbl
    | > > | > | Xref: TK2MSFTNGXA01.phx.gbl
    | > > | > microsoft.public.dotnet.framework.aspnet.buildingcontrols:4003
    | > > | > | X-Tomcat-NG:
    | > microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | > > | > |
    | > > | > | I have a new problem now. I have figured out that the cause is
    the
    | > > same
    | > > | > | reason. If its in the custom DataList, it doesn't work, else it
    | does
    | > > | work.
    | > > | > |
    | > > | > | The scenario:
    | > > | > | After the initial page load, you enter data into controls and
    hit
    | > > submit
    | > > | > | button, the process is as follows:
    | > > | > | Page_Load
    | > > | > | DataList's OnLoad
    | > > | > | Composite Control's OnLoad
    | > > | > | Submit button's OnClick - At this point, the controls in the
    | > composite
    | > > | > | control have no listitems and no selectedValue properties.
    | > > | > |
    | > > | > | I have statically added the composite control onto the same page
    | as
    | > > the
    | > > | > | dynamic one, so here is the process in this scenario:
    | > > | > | Page_Load
    | > > | > | Composite Control's OnLoad (The one whose parent is Page)
    | > > | > | DataList's OnLoad
    | > > | > | Composite Control's OnLoad (The one whose parent is the Custom
    | > > DataList)
    | > > | > | Submit button's OnClick - At this point, the controls in the
    | > > statically
    | > > | > | declared composite control have listitems and have values for
    | > > | > selectedValue
    | > > | > | properties.
    | > > | > |
    | > > | > | So the same control at the same time - the one outside the
    custom
    | > > | Datalist
    | > > | > | has its controls' state set up correctly, the ones inside does
    | not.
    | > > | > |
    | > > | > | So the same reason is at play here. Maybe since i am dynamically
    | > > | creating
    | > > | > | the class using reflection (Assembly.CreateInstance()) that has
    | > > | something
    | > > | > to
    | > > | > | do with it?
    | > > | > |
    | > > | > | Please help mr. Cheng.
    | > > | > |
    | > > | > | Thank you very much!
    | > > | > |
    | > > | > | TS
    | > > | > |
    | > > | > |
    | > > | > |
    | message
    | > > | > | | > > | > | > Hi TS,
    | > > | > | >
    | > > | > | > First, I'm glad that you've got your composite control work,
    all
    | > the
    | > > | > | > dropdownlist's postback events can fire correctly,yes?
    | > > | > | >
    | > > | > | > As for the new problem you encountered when adding your
    | composite
    | > > | > control
    | > > | > | > into DataList's item, is the DataList the asp.net's buildin
    | > DataList
    | > > | > | > control? And since you mentioned that you dynamically add
    your
    | > > | control
    | > > | > | > into it, how do you dynamically add your custom control? Will
    | > there
    | > > | > occur
    | > > | > | > problem if you statically add your control into DataList?
    | > > | > | >
    | > > | > | > Thanks,
    | > > | > | >
    | > > | > | > Steven Cheng
    | > > | > | > Microsoft Online Support
    | > > | > | >
    | > > | > | > Get Secure! www.microsoft.com/security
    | > > | > | > (This posting is provided "AS IS", with no warranties, and
    | confers
    | > > no
    | > > | > | > rights.)
    | > > | > | >
    | > > | > | > --------------------
    | > > | > | > | From: "TS" <>
    | > > | > | > | References: <>
    | > > | > | > <>
    | > > | > | > <2rQIZ7$>
    | > > | > | > <>
    | > > | > | > <unRs#>
    | > > | > | > <>
    | > > | > | > | Subject: Re: explanation of when need to repopulate control
    | > > | > | > | Date: Wed, 3 Aug 2005 19:07:16 -0500
    | > > | > | > | Lines: 1153
    | > > | > | > | X-Priority: 3
    | > > | > | > | X-MSMail-Priority: Normal
    | > > | > | > | X-Newsreader: Microsoft Outlook Express 6.00.2800.1158
    | > > | > | > | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
    | > > | > | > | Message-ID: <#>
    | > > | > | > | Newsgroups:
    | > > | microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | > > | > | > | NNTP-Posting-Host: 103nat100.tea.state.tx.us 198.214.103.100
    | > > | > | > | Path:
    | > > | TK2MSFTNGXA01.phx.gbl!TK2MSFTNGP08.phx.gbl!TK2MSFTNGP14.phx.gbl
    | > > | > | > | Xref: TK2MSFTNGXA01.phx.gbl
    | > > | > | > microsoft.public.dotnet.framework.aspnet.buildingcontrols:3989
    | > > | > | > | X-Tomcat-NG:
    | > > | microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | > > | > | > |
    | > > | > | > | Well Steve, I am almost done. My control works well, except
    | its
    | > > not
    | > > | in
    | > > | > | the
    | > > | > | > | framework i just mentioned. Adding my control dynamically to
    | the
    | > > | > | > datalist's
    | > > | > | > | item may be the root of the cause. i've made sure all custom
    | > > | controls
    | > > | > | > | implmenet INamingContainer & I think all controls have their
    | > id's
    | > > | set,
    | > > | > | so
    | > > | > | > | what else can i do?
    | > > | > | > |
    | > > | > | > | thanks a bunch
    | > > | > | > |
    | > > | > | > | | > > | > | > | > I have figured the cause of the problem, sort of. My main
    | > > control
    | > > | > was
    | > > | > | > | being
    | > > | > | > | > loaded dynamically during a custom data list control's
    | > > | ItemDataBound
    | > > | > | > | event,
    | > > | > | > | > and then added to the e.item.controls collection. Once I
    | > removed
    | > > | it
    | > > | > | from
    | > > | > | > | > here, the correct event was called in my control. the
    | problem
    | > > is i
    | > > | > | need
    | > > | > | > to
    | > > | > | > | > keep it where it is because of the way the page works.
    | > > | > | > | >
    | > > | > | > | > I tried to add INamingContainer to the custom Datalist,
    but
    | > that
    | > > | > | didn't
    | > > | > | > | > help. Any ideas what could make this happen?
    | > > | > | > | >
    | > > | > | > | > thanks so much, i know i'm being a pain, but i'm stuck!
    | > > | > | > | >
    | > > | > | > | > This is the custom DataLists' event:
    | > > | > | > | > protected override void
    | OnItemDataBound(DataListItemEventArgs
    | > e)
    | > > | > | > | >
    | > > | > | > | > {
    | > > | > | > | >
    | > > | > | > | > base.OnItemDataBound(e);
    | > > | > | > | >
    | > > | > | > | > Parameter parameter = (Parameter)e.Item.DataItem;
    | > > | > | > | >
    | > > | > | > | > try
    | > > | > | > | >
    | > > | > | > | > {
    | > > | > | > | >
    | > > | > | > | > Control control;
    | > > | > | > | >
    | > > | > | > | > if(parameter.Type == ParameterType.Control)
    | > > | > | > | >
    | > > | > | > | > control = this.Page.LoadControl(parameter.ControlPath);
    | > > | > | > | >
    | > > | > | > | > else
    | > > | > | > | >
    | > > | > | > | > {
    | > > | > | > | >
    | > > | > | > | > Assembly assembly = parameter.Assembly;
    | > > | > | > | >
    | > > | > | > | > if(assembly == null)
    | > > | > | > | >
    | > > | > | > | > {
    | > > | > | > | >
    | > > | > | > | > // The control didn't declare its own assembly, so use the
    | > > | report's
    | > > | > | > | > ControlsAssembly
    | > > | > | > | >
    | > > | > | > | > assembly = this.ControlsAssembly;
    | > > | > | > | >
    | > > | > | > | > // Ther report's ControlsAssembly is null, so use current
    | > page's
    | > > | > | > assembly
    | > > | > | > | >
    | > > | > | > | > if(assembly == null)
    | > > | > | > | >
    | > > | > | > | > assembly = this.Page.GetType().BaseType.Assembly;
    | > > | > | > | >
    | > > | > | > | > }
    | > > | > | > | >
    | > > | > | > | >
    | > > | > | > | > control = (Control)
    | > > | > | assembly.CreateInstance(parameter.ControlTypeName);
    | > > | > | > | >
    | > > | > | > | > }
    | > > | > | > | >
    | > > | > | > | > control.ID = parameter.Name;
    | > > | > | > | >
    | > > | > | > | > // Set up all the properties of this control from the
    | > > | > | > parameter.properties
    | > > | > | > | >
    | > > | > | > | > foreach(DictionaryEntry de in parameter.Properties)
    | > > | > | > | >
    | > > | > | > | > SetProperty(de.Key.ToString(), de.Value.ToString(),
    | control);
    | > > | > | > | >
    | > > | > | > | >
    | > > | > | > | > e.Item.Controls.Add(control);
    | > > | > | > | >
    | > > | > | > | > }
    | > > | > | > | >
    | > > | > | > | > catch (Exception ex)
    | > > | > | > | >
    | > > | > | > | > {
    | > > | > | > | >
    | > > | > | > | > throw new ApplicationException("Unable to render criteria.
    | > > Reason:
    | > > | > " +
    | > > | > | > | > ex.Message, ex);
    | > > | > | > | >
    | > > | > | > | > }
    | > > | > | > | >
    | > > | > | > | > }
    | > > | > | > | >
    | > > | > | > | > | > > | > | > | > > In testing, i removed the main parent dropdown and only
    | left
    | > > the
    | > > | 2
    | > > | > | > below
    | > > | > | > | > it.
    | > > | > | > | > > this time, the same scenario happened...when the child
    | > > dropdown
    | > > | > list
    | > > | > | > | > > autopostsback, it's immediate parent's
    | selectedindexchanged
    | > > | event
    | > > | > | > fires!
    | > > | > | > | I
    | > > | > | > | > 'm
    | > > | > | > | > > starting to pull my hair out now...I"m stuck!
    | > > | > | > | > >
    | > > | > | > | > > please help superman
    | > > | > | > | > >
    | > > | > | > | > > | > > | > | > | > > > Another problem:
    | > > | > | > | > > >
    | > > | > | > | > > > while i'm waiting on your remark to my last post, i
    | > removed
    | > > | the
    | > > | > | sub
    | > > | > | > | > > > composite controls from my composite control so that
    | there
    | > > is
    | > > | > only
    | > > | > | > | drop
    | > > | > | > | > > down
    | > > | > | > | > > > lists on it. During CreateChildcontrols, i load the
    main
    | > > drop
    | > > | > down
    | > > | > | > | using
    | > > | > | > | > > > databind. When the page is sent to browser for the
    first
    | > > time,
    | > > | i
    | > > | > | > have
    | > > | > | > | my
    | > > | > | > | > > > main drop down filled. I then select an item and its
    | > > | > | > | > SelectedIndexChanged
    | > > | > | > | > > > fires and populates the send drop down list. Then
    when i
    | > > | select
    | > > | > an
    | > > | > | > | item
    | > > | > | > | > > from
    | > > | > | > | > > > it, it posts back, and the event that gets called is
    the
    | > > | > | main(first)
    | > > | > | > | > > > dropdown list's SelectedIndexChanged event, which then
    | > > | > | re-populates
    | > > | > | > | the
    | > > | > | > | > > > second drop down list, then the control returns to the
    | > > browser
    | > > | > | (The
    | > > | > | > | > > > SelectedIndexChanged event never fired for the 2nd
    | > > dropdown's
    | > > | > | > changed
    | > > | > | > | > > > event.???
    | > > | > | > | > > >
    | > > | > | > | > > > thanks again
    | > > | > | > | > > >
    | > > | > | > | > > > using System;
    | > > | > | > | > > >
    | > > | > | > | > > > using System.Collections.Specialized;
    | > > | > | > | > > >
    | > > | > | > | > > > using System.Web.UI;
    | > > | > | > | > > >
    | > > | > | > | > > > using System.Web.UI.WebControls;
    | > > | > | > | > > >
    | > > | > | > | > > > using System.Text;
    | > > | > | > | > > >
    | > > | > | > | > > > using OperationsTeams.Business;
    | > > | > | > | > > >
    | > > | > | > | > > > using OperationsTeams.Data;
    | > > | > | > | > > >
    | > > | > | > | > > > using OperationsTeams.Reporting;
    | > > | > | > | > > >
    | > > | > | > | > > > using OperationsTeams.Reporting.WebControls;
    | > > | > | > | > > >
    | > > | > | > | > > > namespace OperationsTeams.Web.ReportControls
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > /// <summary>
    | > > | > | > | > > >
    | > > | > | > | > > > /// Summary description for FiscalAgentHierarchy.
    | > > | > | > | > > >
    | > > | > | > | > > > /// </summary>
    | > > | > | > | > > >
    | > > | > | > | > > > public class FiscalAgentHierarchy : WebControl,
    | > > | > | > | IReportParameterControl,
    | > > | > | > | > > > INamingContainer
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > public FiscalAgentHierarchy()
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > Parameters.Add(new Parameter("@SchoolYear"));
    | > > | > | > | > > >
    | > > | > | > | > > > Parameters.Add(new Parameter("@ReportingGroup"));
    | > > | > | > | > > >
    | > > | > | > | > > > Parameters.Add(new Parameter("@FiscalAgentID"));
    | > > | > | > | > > >
    | > > | > | > | > > > Parameters.Add(new Parameter("@FundingSourceID"));
    | > > | > | > | > > >
    | > > | > | > | > > > Parameters.Add(new Parameter("@ProviderID"));
    | > > | > | > | > > >
    | > > | > | > | > > > Parameters.Add(new Parameter("@SiteID"));
    | > > | > | > | > > >
    | > > | > | > | > > > Parameters.Add(new Parameter("@ClassID"));
    | > > | > | > | > > >
    | > > | > | > | > > > Parameters["@SchoolYear"].Value = 2006;
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > > | > | > | > > > #region Events
    | > > | > | > | > > >
    | > > | > | > | > > > protected override void OnLoad(EventArgs e)
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > base.OnLoad (e);
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > > | > | > | > > > // The last state of controls from viewstate is now
    | loaded
    | > > | > (Before
    | > > | > | > the
    | > > | > | > | > > > client data is processed)
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > > | > | > | > > > protected override void OnPreRender(EventArgs e)
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > base.OnPreRender (e);
    | > > | > | > | > > >
    | > > | > | > | > > > // The controls now have the client values from the
    the
    | > last
    | > > | > | > postback
    | > > | > | > | > > >
    | > > | > | > | > > > // ddlFundingSource.Visible = FundingSourceVisible;
    | > > | > | > | > > >
    | > > | > | > | > > > // ddlProviders.Visible = ProviderVisible;
    | > > | > | > | > > >
    | > > | > | > | > > > // ddlSites.Visible = SiteVisible;
    | > > | > | > | > > >
    | > > | > | > | > > > // ddlClasses.Visible = ClassVisible;
    | > > | > | > | > > >
    | > > | > | > | > > > // ddlSites.Items.Add(new ListItem("help","1"));
    | > > | > | > | > > >
    | > > | > | > | > > > // ddlSites.Items.Add(new ListItem("me","2"));
    | > > | > | > | > > >
    | > > | > | > | > > > // ddlSites.Visible = true;
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > private void
    | > > | > rysReportingYearSelector_ReportingYearChanged(object
    | > > | > | > | > sender,
    | > > | > | > | > > > EventArgs e)
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > // this.LoadFundingSource();
    | > > | > | > | > > >
    | > > | > | > | > > > // this.LoadProviders();
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > private void fasFiscalAgent_FiscalAgentChanged(object
    | > > sender,
    | > > | > | > | EventArgs
    | > > | > | > | > e)
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > this.LoadFundingSource();
    | > > | > | > | > > >
    | > > | > | > | > > > this.LoadProviders();
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > private void
    | ddlFundingSource_SelectedIndexChanged(object
    | > > | > sender,
    | > > | > | > | > > EventArgs
    | > > | > | > | > > > e)
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > LoadSites();
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > private void ddlProviders_SelectedIndexChanged(object
    | > > sender,
    | > > | > | > | EventArgs
    | > > | > | > | > e)
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > LoadSites();
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > private void ddlSites_SelectedIndexChanged(object
    | sender,
    | > > | > | EventArgs
    | > > | > | > e)
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > LoadClasses();
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > #endregion
    | > > | > | > | > > >
    | > > | > | > | > > > protected override void CreateChildControls()
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > this.ddlFundingSource = new DropDownList();
    | > > | > | > | > > >
    | > > | > | > | > > > this.ddlProviders = new DropDownList();
    | > > | > | > | > > >
    | > > | > | > | > > > this.ddlSites = new DropDownList();
    | > > | > | > | > > >
    | > > | > | > | > > > this.ddlClasses = new DropDownList();
    | > > | > | > | > > >
    | > > | > | > | > > > ddlFundingSource.ID = FundingSourceControlId;
    | > > | > | > | > > >
    | > > | > | > | > > > ddlProviders.ID = ProvidersControlId;
    | > > | > | > | > > >
    | > > | > | > | > > > ddlSites.ID = SitesControlId;
    | > > | > | > | > > >
    | > > | > | > | > > > ddlClasses.ID = ClassesControlId;
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > > | > | > | > > > LoadProviders();
    | > > | > | > | > > >
    | > > | > | > | > > > // start containing table
    | > > | > | > | > > >
    | > > | > | > | > > > this.Controls.Add(WebHelper.MakeLiteral("<table
    | > > cellpadding=0
    | > > | > | > | > > > cellspacing=0><tr><td>"));
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > this.Controls.Add(WebHelper.MakeLiteral("<table><tr><td>"));
    | > > | > | > | > > >
    | > > | > | > | > > > // this.Controls.Add(rysReportingYearSelector);
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > > | this.Controls.Add(WebHelper.MakeLiteral("</td></tr></table>"));
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > > | this.Controls.Add(WebHelper.MakeLiteral("</td></tr><tr><td>"));
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > this.Controls.Add(WebHelper.MakeLiteral("<table><tr><td>"));
    | > > | > | > | > > >
    | > > | > | > | > > > // this.Controls.Add(fasFiscalAgent);
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > > | this.Controls.Add(WebHelper.MakeLiteral("</td></tr></table>"));
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > > | this.Controls.Add(WebHelper.MakeLiteral("</td></tr><tr><td>"));
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > > | this.Controls.Add(WebHelper.MakeLiteral("<table><tr><td>Funding
    | > > | > | > | > > > Source</td><td>"));
    | > > | > | > | > > >
    | > > | > | > | > > > this.Controls.Add(ddlFundingSource);
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > > | this.Controls.Add(WebHelper.MakeLiteral("</td></tr></table>"));
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > > | this.Controls.Add(WebHelper.MakeLiteral("</td></tr><tr><td>"));
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > > | > | > | > >
    | > > | > | > | >
    | > > | > | > |
    | > > | > | >
    | > > | > |
    | > > | >
    | > > |
    | > >
    | >
    |
    this.Controls.Add(WebHelper.MakeLiteral("<table><tr><td>Providers</td><td>")
    | > > | > | > | > > > );
    | > > | > | > | > > >
    | > > | > | > | > > > this.Controls.Add(ddlProviders);
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > > | this.Controls.Add(WebHelper.MakeLiteral("</td></tr></table>"));
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > > | this.Controls.Add(WebHelper.MakeLiteral("</td></tr><tr><td>"));
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > > | > | > | >
    | > > | > | >
    | > > | >
    | > >
    | this.Controls.Add(WebHelper.MakeLiteral("<table><tr><td>Sites</td><td>"));
    | > > | > | > | > > >
    | > > | > | > | > > > this.Controls.Add(ddlSites);
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > > | this.Controls.Add(WebHelper.MakeLiteral("</td></tr></table>"));
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > > | this.Controls.Add(WebHelper.MakeLiteral("</td></tr><tr><td>"));
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > > | > | > | > >
    | > > | > | > | >
    | > > | > | > |
    | > > | > | >
    | > > | > |
    | > > | >
    | > > |
    | > >
    | >
    |
    this.Controls.Add(WebHelper.MakeLiteral("<table><tr><td>Classes</td><td>"));
    | > > | > | > | > > >
    | > > | > | > | > > > this.Controls.Add(ddlClasses);
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > > | this.Controls.Add(WebHelper.MakeLiteral("</td></tr></table>"));
    | > > | > | > | > > >
    | > > | > | > | > > > // end containing table
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > > | this.Controls.Add(WebHelper.MakeLiteral("</td></tr></table>"));
    | > > | > | > | > > >
    | > > | > | > | > > > ddlFundingSource.SelectedIndexChanged += new
    | > > | > | > | > > > EventHandler(ddlFundingSource_SelectedIndexChanged);
    | > > | > | > | > > >
    | > > | > | > | > > > ddlProviders.SelectedIndexChanged += new
    | > > | > | > | > > > EventHandler(ddlProviders_SelectedIndexChanged);
    | > > | > | > | > > >
    | > > | > | > | > > > ddlSites.SelectedIndexChanged += new
    | > > | > | > | > > > EventHandler(ddlSites_SelectedIndexChanged);
    | > > | > | > | > > >
    | > > | > | > | > > > ddlFundingSource.AutoPostBack =
    | ddlProviders.AutoPostBack
    | > =
    | > > | > | > | > > > ddlSites.AutoPostBack = true;
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > private void LoadFundingSource()
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > int fiscalAgentId =
    | > > | > 1;//this.fasFiscalAgent.SelectedFiscalAgentId;
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > > | > | > | > > > if(fiscalAgentId != int.MinValue)
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > FundingSourceVisible = true;
    | > > | > | > | > > >
    | > > | > | > | > > > this.ddlFundingSource.DataSource =
    | > > | > | > | > FiscalAgentFunding.Find(fiscalAgentId);
    | > > | > | > | > > >
    | > > | > | > | > > > this.ddlFundingSource.DataTextField =
    | "ShortDescription";
    | > > | > | > | > > >
    | > > | > | > | > > > this.ddlFundingSource.DataValueField = "CodeId";
    | > > | > | > | > > >
    | > > | > | > | > > > this.ddlFundingSource.DataBind();
    | > > | > | > | > > >
    | > > | > | > | > > > if(this.ddlFundingSource.Items.Count > 1)
    | > > | > | > | > > >
    | > > | > | > | > > > this.ddlFundingSource.Items.Insert(0, new
    | > > | ListItem(string.Empty,
    | > > | > | > | > > > string.Empty));
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > else
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > FundingSourceVisible = false;
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > private void LoadProviders()
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > int fiscalAgentId =
    | > > 1;//fasFiscalAgent.SelectedFiscalAgentId;
    | > > | > | > | > > >
    | > > | > | > | > > > if(fiscalAgentId != int.MinValue)
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > // ddlSites.Items.Add(new ListItem("help","1"));
    | > > | > | > | > > >
    | > > | > | > | > > > // ddlSites.Items.Add(new ListItem("me","2"));
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > > | > | > | > > > ProviderVisible = true;
    | > > | > | > | > > >
    | > > | > | > | > > > // are these dates correct???????????????????????????
    | > > | > | > | > > >
    | > > | > | > | > > > ddlProviders.DataSource =
    | > > | > FiscalAgentProvider.Find(fiscalAgentId,
    | > > | > | > new
    | > > | > | > | > > > DateTime(2005,7,1), new
    | > > | > | > | > > >
    | > > | > | > |
    | > > | >
    | > DateTime(2006,6,30));//rysReportingYearSelector.ReportingYearStartDate,
    | > > | > | > | > > > rysReportingYearSelector.ReportingYearEndDate); //
    | > > | > | > | > > >
    | > > | > | > | > > > ddlProviders.DataTextField = "ProviderName";
    | > > | > | > | > > >
    | > > | > | > | > > > ddlProviders.DataValueField = "ProviderId";
    | > > | > | > | > > >
    | > > | > | > | > > > ddlProviders.DataBind();
    | > > | > | > | > > >
    | > > | > | > | > > > ddlProviders.Items.Insert(0, new
    ListItem(string.Empty,
    | > > | > | > | string.Empty));
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > else
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > this.ddlProviders.Items.Clear();
    | > > | > | > | > > >
    | > > | > | > | > > > ProviderVisible = false;
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > // LoadSites();
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > private void LoadSites()
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > if(ddlProviders.SelectedValue != string.Empty)
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > // Load the Site search parameters.
    | > > | > | > | > > >
    | > > | > | > | > > > SiteFindArgs siteFindArgs=new SiteFindArgs();
    | > > | > | > | > > >
    | > > | > | > | > > > siteFindArgs.FiscalAgentId=1;
    | > > | > | > | > > >
    //Convert.ToInt32(fasFiscalAgent.SelectedFiscalAgentId);
    | > > | > | > | > > >
    | > > | > | > | > > > SiteVisible = true;
    | > > | > | > | > > >
    | > > | > | > | > > > ddlSites.DataSource =
    Business.Site.Find(siteFindArgs);
    | > > | > | > | > > >
    | > > | > | > | > > > ddlSites.DataTextField = "Name";
    | > > | > | > | > > >
    | > > | > | > | > > > ddlSites.DataValueField = "SiteId";
    | > > | > | > | > > >
    | > > | > | > | > > > ddlSites.DataBind();
    | > > | > | > | > > >
    | > > | > | > | > > > ddlSites.Items.Insert(0, new ListItem(string.Empty,
    | > > | > | string.Empty));
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > else
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > ddlSites.Items.Clear();
    | > > | > | > | > > >
    | > > | > | > | > > > SiteVisible = false;
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > // LoadClasses();
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > private void LoadClasses()
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > if(ddlSites.SelectedValue != string.Empty)
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > AdultEdClassFindArgs adultEdClassFindArgs = new
    | > > | > | > | AdultEdClassFindArgs();
    | > > | > | > | > > >
    | > > | > | > | > > > // adultEdClassFindArgs.FiscalAgentId =
    | > > | > | > | > > > Convert.ToInt32(fasFiscalAgent.SelectedFiscalAgentId);
    | > > | > | > | > > >
    | > > | > | > | > > > // adultEdClassFindArgs.ReportingYearStartDate =
    | > > | > | > | > > > rysReportingYearSelector.ReportingYearStartDate;
    | > > | > | > | > > >
    | > > | > | > | > > > // adultEdClassFindArgs.ReportingYearEndDate =
    | > > | > | > | > > > rysReportingYearSelector.ReportingYearEndDate;
    | > > | > | > | > > >
    | > > | > | > | > > > // adultEdClassFindArgs.ProviderName =
    | > > | > ddlProviders.SelectedValue;
    | > > | > | > | > > >
    | > > | > | > | > > > // adultEdClassFindArgs.SiteName =
    | ddlSites.SelectedValue;
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > > | > | > | > > > ClassVisible = true;
    | > > | > | > | > > >
    | > > | > | > | > > > ddlClasses.DataSource =
    | > > | AdultEdClass.Find(adultEdClassFindArgs);
    | > > | > | > | > > >
    | > > | > | > | > > > ddlClasses.DataTextField = "Name";
    | > > | > | > | > > >
    | > > | > | > | > > > ddlClasses.DataValueField = "ClassId";
    | > > | > | > | > > >
    | > > | > | > | > > > ddlClasses.DataBind();
    | > > | > | > | > > >
    | > > | > | > | > > > ddlClasses.Items.Insert(0, new ListItem(string.Empty,
    | > > | > | > string.Empty));
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > else
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > ddlClasses.Items.Clear();
    | > > | > | > | > > >
    | > > | > | > | > > > ClassVisible = false;
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > > | > | > | > > > #region Public Properties
    | > > | > | > | > > >
    | > > | > | > | > > > #region IReportParameterControl Members
    | > > | > | > | > > >
    | > > | > | > | > > > public object ParameterValue
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > get{ return null; }
    | > > | > | > | > > >
    | > > | > | > | > > > set{ /*do nothing */ }
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > public ParameterCollection Parameters
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > get{ return parameters; }
    | > > | > | > | > > >
    | > > | > | > | > > > set{ parameters = value;}
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > #endregion
    | > > | > | > | > > >
    | > > | > | > | > > > protected bool FundingSourceVisible
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > get
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > if(ViewState["FundingSourceVisible"] == null)
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > return false;
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > return (bool)ViewState["FundingSourceVisible"];
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > set
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > TrackViewState();
    | > > | > | > | > > >
    | > > | > | > | > > > ViewState["FundingSourceVisible"] = value;
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > protected bool ProviderVisible
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > get
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > if(ViewState["ProviderVisible"] == null)
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > return false;
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > return (bool)ViewState["ProviderVisible"];
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > set
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > TrackViewState();
    | > > | > | > | > > >
    | > > | > | > | > > > ViewState["ProviderVisible"] = value;
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > protected bool SiteVisible
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > get
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > if(ViewState["SiteVisible"] == null)
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > return false;
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > return (bool)ViewState["SiteVisible"];
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > set
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > TrackViewState();
    | > > | > | > | > > >
    | > > | > | > | > > > ViewState["SiteVisible"] = value;
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > protected bool ClassVisible
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > get
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > if(ViewState["ClassVisible"] == null)
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > return false;
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > return (bool)ViewState["ClassVisible"];
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > set
    | > > | > | > | > > >
    | > > | > | > | > > > {
    | > > | > | > | > > >
    | > > | > | > | > > > TrackViewState();
    | > > | > | > | > > >
    | > > | > | > | > > > ViewState["ClassVisible"] = value;
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > #endregion
    | > > | > | > | > > >
    | > > | > | > | > > > #region Private Member Variables
    | > > | > | > | > > >
    | > > | > | > | > > > private DropDownList ddlFundingSource;
    | > > | > | > | > > >
    | > > | > | > | > > > private DropDownList ddlProviders;
    | > > | > | > | > > >
    | > > | > | > | > > > private DropDownList ddlSites;
    | > > | > | > | > > >
    | > > | > | > | > > > private DropDownList ddlClasses;
    | > > | > | > | > > >
    | > > | > | > | > > > private ParameterCollection parameters = new
    | > > | > | ParameterCollection();
    | > > | > | > | > > >
    | > > | > | > | > > > #endregion
    | > > | > | > | > > >
    | > > | > | > | > > > #region Private Constants
    | > > | > | > | > > >
    | > > | > | > | > > > private const string ReportingYearSelectorControlId =
    | > > | > | > | > > > "rysReportingYearSelector";
    | > > | > | > | > > >
    | > > | > | > | > > > private const string FiscalAgentSelectorControlId =
    | > > | > | > | > > > "fasFiscalAgentSelector";
    | > > | > | > | > > >
    | > > | > | > | > > > private const string FundingSourceControlId =
    | > > | > "ddlFundingSource";
    | > > | > | > | > > >
    | > > | > | > | > > > private const string FundingSourceLabelControlId =
    | > > | > | > "lblFundingSource";
    | > > | > | > | > > >
    | > > | > | > | > > > private const string ProvidersControlId =
    | "ddlProviders";
    | > > | > | > | > > >
    | > > | > | > | > > > private const string ProvidersLabelControlId =
    | > > "lblProviders";
    | > > | > | > | > > >
    | > > | > | > | > > > private const string SitesControlId = "ddlSites";
    | > > | > | > | > > >
    | > > | > | > | > > > private const string SitesLabelControlId = "lblSites";
    | > > | > | > | > > >
    | > > | > | > | > > > private const string ClassesControlId = "ddlClasses";
    | > > | > | > | > > >
    | > > | > | > | > > > private const string ClassesLabelControlId =
    | "lblClasses";
    | > > | > | > | > > >
    | > > | > | > | > > > #endregion
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > > }
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > > | > | > | > > > "Steven Cheng[MSFT]" <>
    | wrote
    | > in
    | > > | > | message
    | > > | > | > | > > > | > > | > | > | > > > > Hi TS,
    | > > | > | > | > > > >
    | > > | > | > | > > > > See you again :), seems you're rushing in a asp.net
    | > > project
    | > > | > | these
    | > > | > | > | > days?
    | > > | > | > | > > > > For the question you mentioned in this post, here
    are
    | > some
    | > > | of
    | > > | > my
    | > > | > | > | > > > > understanding and suggestions:
    | > > | > | > | > > > >
    | > > | > | > | > > > > 1. ASP.NET controls derived from Control will
    | > > automatically
    | > > | > | > maintain
    | > > | > | > | > its
    | > > | > | > | > > > > ViewStates according to the asp.net web page's
    events
    | > > | > sequence.
    | > > | > | So
    | > > | > | > | for
    | > > | > | > | > > > > composite control, those nested sub Controls' status
    | > > | > (properties
    | > > | > | > | which
    | > > | > | > | > > be
    | > > | > | > | > > > > persistd in Viewsstate ) will be store and retrieve
    | > > | > | automatically.
    | > > | > | > | > > > >
    | > > | > | > | > > > > 2. However, there're some thing we need to care when
    | > > | building
    | > > | > | > | > composite
    | > > | > | > | > > > > control:
    | > > | > | > | > > > > #remember to implement INamingContainer for controls
    | > which
    | > > | > will
    | > > | > | > have
    | > > | > | > | > > > nested
    | > > | > | > | > > > > sub controls. Otherwise, even handler mapping,
    | ViewState
    | > > | > loading
    | > > | > | > | will
    | > > | > | > | > > > occur
    | > > | > | > | > > > > unexpectedly.
    | > > | > | > | > > > >
    | > > | > | > | > > > > #Do remember to assign a explicit ID for each sub
    | > > | > controls(same
    | > > | > | > | reason
    | > > | > | > | > > as
    | > > | > | > | > > > > #1). Also, please always try best to add subcontrols
    | in
    | > > the
    | > > | > | > | > > > > "CreateChildControls" method(just create control
    | > > hierarchy)
    | > > | > and
    | > > | > | > put
    | > > | > | > | > > > > manipulating code in postback event or PreRender
    | event.
    | > > | > | > | > > > >
    | > > | > | > | > > > > In addition, for your detaile scenario, I've just
    | built
    | > a
    | > > | very
    | > > | > | > | simple
    | > > | > | > | > > demo
    | > > | > | > | > > > > control which have three dropdownlists and The
    "Top"
    | > one
    | > > | will
    | > > | > | > | display
    | > > | > | > | > > > > first(other twos invisible) and according to the top
    | > one's
    | > > | > | > | selection,
    | > > | > | > | > > the
    | > > | > | > | > > > > "Mid" dropdownlist will be pouplated and the same
    when
    | > the
    | > > | > | "mid"'s
    | > > | > | > | > > > > selection changed......
    | > > | > | > | > > > >
    | > > | > | > | > > > > Here's the control's code for your reference:
    | > > | > | > | > > > >
    | > > | > | > | > > > > =========================
    | > > | > | > | > > > > [DefaultProperty("Text"),
    | > > | > | > | > > > > ToolboxData("<{0}:MultiListControl
    | > > | > | > | > > runat=server></{0}:MultiListControl>")]
    | > > | > | > | > > > > public class MultiListControl :
    | > > | > | > | System.Web.UI.WebControls.WebControl,
    | > > | > | > | > > > > INamingContainer
    | > > | > | > | > > > > {
    | > > | > | > | > > > > private string text;
    | > > | > | > | > > > >
    | > > | > | > | > > > > private DropDownList lstTop;
    | > > | > | > | > > > > private DropDownList lstMid;
    | > > | > | > | > > > > private DropDownList lstBot;
    | > > | > | > | > > > >
    | > > | > | > | > > > >
    | > > | > | > | > > > >
    | > > | > | > | > > > >
    | > > | > | > | > > > >
    | > > | > | > | > > > > protected bool MidVisible
    | > > | > | > | > > > > {
    | > > | > | > | > > > > get{
    | > > | > | > | > > > > if(ViewState["MID_VISIBLE"] == null)
    | > > | > | > | > > > > {
    | > > | > | > | > > > > return false;
    | > > | > | > | > > > > }
    | > > | > | > | > > > >
    | > > | > | > | > > > > return (bool)ViewState["MID_VISIBLE"];
    | > > | > | > | > > > > }
    | > > | > | > | > > > >
    | > > | > | > | > > > > set{
    | > > | > | > | > > > > TrackViewState();
    | > > | > | > | > > > > ViewState["MID_VISIBLE"] = value;
    | > > | > | > | > > > > }
    | > > | > | > | > > > > }
    | > > | > | > | > > > >
    | > > | > | > | > > > > protected bool BotVisible
    | > > | > | > | > > > > {
    | > > | > | > | > > > > get
    | > > | > | > | > > > > {
    | > > | > | > | > > > > if(ViewState["BOT_VISIBLE"] == null)
    | > > | > | > | > > > > {
    | > > | > | > | > > > > return false;
    | > > | > | > | > > > > }
    | > > | > | > | > > > >
    | > > | > | > | > > > > return (bool)ViewState["BOT_VISIBLE"];
    | > > | > | > | > > > > }
    | > > | > | > | > > > >
    | > > | > | > | > > > > set
    | > > | > | > | > > > > {
    | > > | > | > | > > > > TrackViewState();
    | > > | > | > | > > > > ViewState["BOT_VISIBLE"] = value;
    | > > | > | > | > > > > }
    | > > | > | > | > > > > }
    | > > | > | > | > > > >
    | > > | > | > | > > > >
    | > > | > | > | > > > > [Bindable(true),
    | > > | > | > | > > > > Category("Appearance"),
    | > > | > | > | > > > > DefaultValue("")]
    | > > | > | > | > > > > public string Text
    | > > | > | > | > > > > {
    | > > | > | > | > > > > get
    | > > | > | > | > > > > {
    | > > | > | > | > > > > return text;
    | > > | > | > | > > > > }
    | > > | > | > | > > > >
    | > > | > | > | > > > > set
    | > > | > | > | > > > > {
    | > > | > | > | > > > > text = value;
    | > > | > | > | > > > > }
    | > > | > | > | > > > > }
    | > > | > | > | > > > >
    | > > | > | > | > > > >
    | > > | > | > | > > > > protected override void CreateChildControls()
    | > > | > | > | > > > > {
    | > > | > | > | > > > > Controls.Clear();
    | > > | > | > | > > > >
    | > > | > | > | > > > > Controls.Add(
    | > > | > | > | > > > > new LiteralControl(
    | > > | > | > | > > > > @"
    | > > | > | > | > > > > <table width='100%'>
    | > > | > | > | > > > > <tr><td>
    | > > | > | > | > > > > "));
    | > > | > | > | > > > >
    | > > | > | > | > > > > lstTop = new DropDownList();
    | > > | > | > | > > > > lstTop.ID = "lstTop";
    | > > | > | > | > > > >
    | > > | > | > | > > > > lstTop.Items.Add("----------");
    | > > | > | > | > > > > lstTop.Items.Add("Top_Item_1");
    | > > | > | > | > > > > lstTop.Items.Add("Top_Item_2");
    | > > | > | > | > > > > lstTop.Items.Add("Top_Item_3");
    | > > | > | > | > > > > lstTop.Items.Add("Top_Item_4");
    | > > | > | > | > > > >
    | > > | > | > | > > > > Controls.Add(lstTop);
    | > > | > | > | > > > >
    | > > | > | > | > > > > Controls.Add(
    | > > | > | > | > > > > new LiteralControl(
    | > > | > | > | > > > > @"<br/>"
    | > > | > | > | > > > > ));
    | > > | > | > | > > > >
    | > > | > | > | > > > > lstMid = new DropDownList();
    | > > | > | > | > > > > lstMid.ID = "lstMid";
    | > > | > | > | > > > >
    | > > | > | > | > > > > Controls.Add(lstMid);
    | > > | > | > | > > > >
    | > > | > | > | > > > > Controls.Add(
    | > > | > | > | > > > > new LiteralControl(
    | > > | > | > | > > > > @"<br/>"
    | > > | > | > | > > > > ));
    | > > | > | > | > > > >
    | > > | > | > | > > > >
    | > > | > | > | > > > > lstBot = new DropDownList();
    | > > | > | > | > > > > lstBot.ID = "lstBot";
    | > > | > | > | > > > >
    | > > | > | > | > > > > Controls.Add(lstBot);
    | > > | > | > | > > > >
    | > > | > | > | > > > >
    | > > | > | > | > > > > Controls.Add(
    | > > | > | > | > > > > new LiteralControl(
    | > > | > | > | > > > > @"
    | > > | > | > | > > > > </td></tr>
    | > > | > | > | > > > > </table>
    | > > | > | > | > > > > "
    | > > | > | > | > > > > ));
    | > > | > | > | > > > >
    | > > | > | > | > > > >
    | > > | > | > | > > > >
    | > > | > | > | > > > > lstTop.SelectedIndexChanged +=new
    | > > | > | > | > > EventHandler(lst_SelectedIndexChanged);
    | > > | > | > | > > > > lstMid.SelectedIndexChanged +=new
    | > > | > | > | > > EventHandler(lst_SelectedIndexChanged);
    | > > | > | > | > > > > lstBot.SelectedIndexChanged +=new
    | > > | > | > | > > EventHandler(lst_SelectedIndexChanged);
    | > > | > | > | > > > >
    | > > | > | > | > > > > lstTop.AutoPostBack = lstMid.AutoPostBack =
    | > > | > lstBot.AutoPostBack
    | > > | > | =
    | > > | > | > | > true;
    | > > | > | > | > > > >
    | > > | > | > | > > > >
    | > > | > | > | > > > > }
    | > > | > | > | > > > >
    | > > | > | > | > > > >
    | > > | > | > | > > > > protected override void OnPreRender(EventArgs e)
    | > > | > | > | > > > > {
    | > > | > | > | > > > > base.OnPreRender (e);
    | > > | > | > | > > > >
    | > > | > | > | > > > > lstMid.Visible = MidVisible;
    | > > | > | > | > > > > lstBot.Visible = BotVisible;
    | > > | > | > | > > > > }
    | > > | > | > | > > > >
    | > > | > | > | > > > >
    | > > | > | > | > > > >
    | > > | > | > | > > > >
    | > > | > | > | > > > > private void lst_SelectedIndexChanged(object sender,
    | > > | > | > | System.EventArgs
    | > > | > | > | > e)
    | > > | > | > | > > > > {
    | > > | > | > | > > > >
    | > > | > | > | > > > > DropDownList lst = sender as DropDownList;
    | > > | > | > | > > > >
    | > > | > | > | > > > > switch(lst.ID)
    | > > | > | > | > > > > {
    | > > | > | > | > > > > case "lstTop":
    | > > | > | > | > > > >
    | > > | > | > | > > > > if(lst.SelectedIndex != 0)
    | > > | > | > | > > > > {
    | > > | > | > | > > > > lstMid.DataSource = GetSubItems(lst.SelectedValue);
    | > > | > | > | > > > > lstMid.DataTextField = "Text";
    | > > | > | > | > > > > lstMid.DataValueField= "Value";
    | > > | > | > | > > > > lstMid.DataBind();
    | > > | > | > | > > > >
    | > > | > | > | > > > > MidVisible = true;
    | > > | > | > | > > > > }
    | > > | > | > | > > > > else
    | > > | > | > | > > > > {
    | > > | > | > | > > > > MidVisible = BotVisible = false;
    | > > | > | > | > > > > }
    | > > | > | > | > > > >
    | > > | > | > | > > > > break;
    | > > | > | > | > > > > case "lstMid":
    | > > | > | > | > > > >
    | > > | > | > | > > > > lstBot.DataSource = GetSubItems(lst.SelectedValue);
    | > > | > | > | > > > > lstBot.DataTextField = "Text";
    | > > | > | > | > > > > lstBot.DataValueField= "Value";
    | > > | > | > | > > > > lstBot.DataBind();
    | > > | > | > | > > > >
    | > > | > | > | > > > > MidVisible = BotVisible = true;
    | > > | > | > | > > > >
    | > > | > | > | > > > > break;
    | > > | > | > | > > > > case "lstBot":
    | > > | > | > | > > > >
    | > > | > | > | > > > >
    | > > | > | > | > > > >
    | > > | > | > | > > > > break;
    | > > | > | > | > > > > }
    | > > | > | > | > > > >
    | > > | > | > | > > > > Page.Response.Write("<br>" + lst.ID +
    | > > | > "_selectedindexchanged!" +
    | > > | > | > | > > > > lst.EnableViewState);
    | > > | > | > | > > > > }
    | > > | > | > | > > > >
    | > > | > | > | > > > > #region --Helper functions---
    | > > | > | > | > > > >
    | > > | > | > | > > > > public ListItemCollection GetSubItems(string parent)
    | > > | > | > | > > > > {
    | > > | > | > | > > > > ListItemCollection items = new ListItemCollection();
    | > > | > | > | > > > > int count = parent.Length;
    | > > | > | > | > > > >
    | > > | > | > | > > > > for(int i=0;i<count;++i)
    | > > | > | > | > > > > {
    | > > | > | > | > > > > items.Add(parent + "_Item_" + i);
    | > > | > | > | > > > > }
    | > > | > | > | > > > >
    | > > | > | > | > > > > return items;
    | > > | > | > | > > > > }
    | > > | > | > | > > > >
    | > > | > | > | > > > >
    | > > | > | > | > > > > #endregion
    | > > | > | > | > > > > }
    | > > | > | > | > > > >
    | > > | > | > | > > > > ========================
    | > > | > | > | > > > > Hope helps. Thanks,
    | > > | > | > | > > > >
    | > > | > | > | > > > > Steven Cheng
    | > > | > | > | > > > > Microsoft Online Support
    | > > | > | > | > > > >
    | > > | > | > | > > > > Get Secure! www.microsoft.com/security
    | > > | > | > | > > > > (This posting is provided "AS IS", with no
    warranties,
    | > and
    | > > | > | confers
    | > > | > | > | no
    | > > | > | > | > > > > rights.)
    | > > | > | > | > > > >
    | > > | > | > | > > > >
    | > > | > | > | > > > > --------------------
    | > > | > | > | > > > > | From: "TS" <>
    | > > | > | > | > > > > | References:
    <>
    | > > | > | > | > > > > | Subject: Re: explanation of when need to
    repopulate
    | > > | control
    | > > | > | > | > > > > | Date: Tue, 2 Aug 2005 18:32:23 -0500
    | > > | > | > | > > > > | Lines: 39
    | > > | > | > | > > > > | X-Priority: 3
    | > > | > | > | > > > > | X-MSMail-Priority: Normal
    | > > | > | > | > > > > | X-Newsreader: Microsoft Outlook Express
    | 6.00.2800.1158
    | > > | > | > | > > > > | X-MimeOLE: Produced By Microsoft MimeOLE
    | > V6.00.2800.1165
    | > > | > | > | > > > > | Message-ID:
    <>
    | > > | > | > | > > > > | Newsgroups:
    | > > | > | > | > > > >
    | > > | > | > | > > >
    | > > | > | > | > >
    | > > | > | > | >
    | > > | > | > |
    | > > | > | >
    | > > | > |
    | > > | >
    | > > |
    | > >
    | >
    |
    microsoft.public.dotnet.framework.aspnet.webcontrols,microsoft.public.dotnet
    | > > | > | > | > > > > framework.aspnet.buildingcontrols
    | > > | > | > | > > > > | NNTP-Posting-Host: 103nat100.tea.state.tx.us
    | > > | 198.214.103.100
    | > > | > | > | > > > > | Path:
    | > > | > | > | >
    | > TK2MSFTNGXA01.phx.gbl!TK2MSFTNGP08.phx.gbl!TK2MSFTNGP10.phx.gbl
    | > > | > | > | > > > > | Xref: TK2MSFTNGXA01.phx.gbl
    | > > | > | > | > > > >
    | > > | microsoft.public.dotnet.framework.aspnet.buildingcontrols:3979
    | > > | > | > | > > > >
    | > microsoft.public.dotnet.framework.aspnet.webcontrols:10243
    | > > | > | > | > > > > | X-Tomcat-NG:
    | > > | > | > | > microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | > > | > | > | > > > > |
    | > > | > | > | > > > > | sorry, heres the scenario i'm trying to
    accomplish:
    | > > | > | > | > > > > | I have a composite control that contains 4 drop
    down
    | > > | lists.
    | > > | > | When
    | > > | > | > | the
    | > > | > | > | > > > page
    | > > | > | > | > > > > | loads initially, i want the first drop down filled
    | and
    | > > the
    | > > | > | rest
    | > > | > | > | > > > invisible.
    | > > | > | > | > > > > | When you select an item in this ddl, it posts back
    | to
    | > > the
    | > > | > | server
    | > > | > | > | and
    | > > | > | > | > > > based
    | > > | > | > | > > > > | on its value, it populates its immediate child's
    | drop
    | > > down
    | > > | > | list.
    | > > | > | > | So
    | > > | > | > | > > now
    | > > | > | > | > > > > the
    | > > | > | > | > > > > | top ddl has a value selected and the 2nd one just
    | has
    | > > its
    | > > | > | items
    | > > | > | > | > > > populated.
    | > > | > | > | > > > > | Then when the 2nd drop down list gets selected, it
    | > posts
    | > > | to
    | > > | > | the
    | > > | > | > | > server
    | > > | > | > | > > > and
    | > > | > | > | > > > > | its value is used to populate(filter) the items
    for
    | > the
    | > > | 3rd
    | > > | > | drop
    | > > | > | > | > down
    | > > | > | > | > > > > | list...and so on for each drop down list.
    | > > | > | > | > > > > |
    | > > | > | > | > > > > | Please tell me what i need to do to handle post
    back
    | > > data
    | > > | > and
    | > > | > | > | > maintain
    | > > | > | > | > > > > state
    | > > | > | > | > > > > | from one postback to another while keeping the
    drop
    | > > | > downlists
    | > > | > | > | filled
    | > > | > | > | > > and
    | > > | > | > | > > > > | their values persisted.
    | > > | > | > | > > > > |
    | > > | > | > | > > > > | thank you again!
    | > > | > | > | > > > > |
    | > > | > | > | > > > > |
    | > > | > | > | > > > > | | > > | > | > | > > > > | > I have a quesiton:
    | > > | > | > | > > > > | > if i have a composite control and on its intial
    | page
    | > > | > | loading,
    | > > | > | > i
    | > > | > | > | > fill
    | > > | > | > | > > > my
    | > > | > | > | > > > > | (sub
    | > > | > | > | > > > > | > control) drop down list's items collection from
    | the
    | > > | > database
    | > > | > | > and
    | > > | > | > | > > > return.
    | > > | > | > | > > > > | > When the user hits a button to cause postback,
    the
    | > > | control
    | > > | > | is
    | > > | > | > | > going
    | > > | > | > | > > to
    | > > | > | > | > > > > get
    | > > | > | > | > > > > | > initialized, then does its items collection
    that i
    | > > | filled
    | > > | > on
    | > > | > | > the
    | > > | > | > | > > > initial
    | > > | > | > | > > > > | > page request get repopulated from viewstate? And
    | on
    | > > top
    | > > | of
    | > > | > | > that,
    | > > | > | > | > if
    | > > | > | > | > > > so,
    | > > | > | > | > > > > | does
    | > > | > | > | > > > > | > the list item that person selected in the drop
    | down
    | > > list
    | > > | > | again
    | > > | > | > | set
    | > > | > | > | > > > > itself
    | > > | > | > | > > > > | as
    | > > | > | > | > > > > | > the selected item in the list?
    | > > | > | > | > > > > | >
    | > > | > | > | > > > > | > OR do i have to re-load the items on every page
    | > > request
    | > > | > and
    | > > | > | > then
    | > > | > | > | > > > > populate
    | > > | > | > | > > > > | > its value some other way???
    | > > | > | > | > > > > | >
    | > > | > | > | > > > > | > thanks a bunch
    | > > | > | > | > > > > | >
    | > > | > | > | > > > > | >
    | > > | > | > | > > > > |
    | > > | > | > | > > > > |
    | > > | > | > | > > > > |
    | > > | > | > | > > > >
    | > > | > | > | > > >
    | > > | > | > | > > >
    | > > | > | > | > >
    | > > | > | > | > >
    | > > | > | > | >
    | > > | > | > | >
    | > > | > | > |
    | > > | > | > |
    | > > | > | > |
    | > > | > | >
    | > > | > |
    | > > | > |
    | > > | > |
    | > > | >
    | > > |
    | > > |
    | > > |
    | > >
    | >
    | >
    |
    |
    |
     
    Steven Cheng[MSFT], Aug 17, 2005
    #22
    1. Advertisements

  3. TS

    TS Guest

    ok, i will do that thanks


     
    TS, Aug 17, 2005
    #23
  4. TS

    TS Guest

    Did you get it?

    please respond here with updates. Thanks

     
    TS, Aug 18, 2005
    #24
  5. TS

    TS Guest

    Steven I think i know what is happening:
    I recently decided to use buttons instead of using autopostback, and noticed
    that what is happening is that when you click the 2nd list and it
    autopostbacks, after the CreateChildControls method, the next step is to
    start calling event handlers, and when it calls the 1st list's event
    handler, at that point, the 2nd list should have been reinitialized and
    repopulated with state and it isn't. So I think the reason why the 1st
    list's event handler is getting called instead of the 2nd list's event
    handler, is because the 2nd list is empty and doesn't have its state, so the
    only one that does is the 1st list (which is populated every time in
    CreateChildControls).

    So there is something going on with my control not having its state set up
    when it should. I don't know the reason, but i'm on the right track because
    i have tested it while using autopostback, and when using a separate button
    to post back and both times the 2nd list is empty without renewed state.

    I'm worried that this may not even be possible because the container page
    doesn't fill the custom datalist with the controls until the itemDataBound
    event which is after initialization, and hence my control's intialization.
    I"m just wondering if it is possible.

    Hope this helps figure out the control execution lifecycle. Thanks a bunch

     
    TS, Aug 18, 2005
    #25
  6. Thanks TS,

    I've received both your two mails and will have a look into the code.

    Thanks,

    Steven Cheng
    Microsoft Online Support

    Get Secure! www.microsoft.com/security
    (This posting is provided "AS IS", with no warranties, and confers no
    rights.)
    --------------------
    | From: "TS" <>
    | References: <>
    <>
    <2rQIZ7$>
    <>
    <unRs#>
    <>
    <#>
    <$>
    <#>
    <>
    <>
    <>
    <>
    <#>
    <HSC#>
    | Subject: Re: explanation of when need to repopulate control
    | Date: Thu, 18 Aug 2005 13:12:53 -0500
    | Lines: 1816
    | X-Priority: 3
    | X-MSMail-Priority: Normal
    | X-Newsreader: Microsoft Outlook Express 6.00.2800.1158
    | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
    | Message-ID: <>
    | Newsgroups: microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | NNTP-Posting-Host: 101nat080.tea.state.tx.us 198.214.101.80
    | Path: TK2MSFTNGXA01.phx.gbl!TK2MSFTNGP08.phx.gbl!TK2MSFTNGP14.phx.gbl
    | Xref: TK2MSFTNGXA01.phx.gbl
    microsoft.public.dotnet.framework.aspnet.buildingcontrols:4072
    | X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.buildingcontrols
    |
    | Steven I think i know what is happening:
    | I recently decided to use buttons instead of using autopostback, and
    noticed
    | that what is happening is that when you click the 2nd list and it
    | autopostbacks, after the CreateChildControls method, the next step is to
    | start calling event handlers, and when it calls the 1st list's event
    | handler, at that point, the 2nd list should have been reinitialized and
    | repopulated with state and it isn't. So I think the reason why the 1st
    | list's event handler is getting called instead of the 2nd list's event
    | handler, is because the 2nd list is empty and doesn't have its state, so
    the
    | only one that does is the 1st list (which is populated every time in
    | CreateChildControls).
    |
    | So there is something going on with my control not having its state set up
    | when it should. I don't know the reason, but i'm on the right track
    because
    | i have tested it while using autopostback, and when using a separate
    button
    | to post back and both times the 2nd list is empty without renewed state.
    |
    | I'm worried that this may not even be possible because the container page
    | doesn't fill the custom datalist with the controls until the itemDataBound
    | event which is after initialization, and hence my control's intialization.
    | I"m just wondering if it is possible.
    |
    | Hope this helps figure out the control execution lifecycle. Thanks a bunch
    |
    | | > Hi TS,
    | >
    | > You can mail me through the address by removing the "online" in the
    | address
    | > of my signature.
    | >
    | > Thanks,
    | >
    | > Steven Cheng
    | > Microsoft Online Support
    | >
    | > Get Secure! www.microsoft.com/security
    | > (This posting is provided "AS IS", with no warranties, and confers no
    | > rights.)
    | > --------------------
    | > | From: "TS" <>
    | > | References: <>
    | > <>
    | > <2rQIZ7$>
    | > <>
    | > <unRs#>
    | > <>
    | > <#>
    | > <$>
    | > <#>
    | > <>
    | > <>
    | > <>
    | > <>
    | > | Subject: Re: explanation of when need to repopulate control
    | > | Date: Tue, 16 Aug 2005 15:44:51 -0500
    | > | Lines: 1635
    | > | X-Priority: 3
    | > | X-MSMail-Priority: Normal
    | > | X-Newsreader: Microsoft Outlook Express 6.00.2800.1158
    | > | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
    | > | Message-ID: <#>
    | > | Newsgroups: microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | > | NNTP-Posting-Host: 101nat080.tea.state.tx.us 198.214.101.80
    | > | Path: TK2MSFTNGXA01.phx.gbl!TK2MSFTNGP08.phx.gbl!TK2MSFTNGP10.phx.gbl
    | > | Xref: TK2MSFTNGXA01.phx.gbl
    | > microsoft.public.dotnet.framework.aspnet.buildingcontrols:4058
    | > | X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | > |
    | > | So what is happening is the same thing that was happening, the top
    most
    | > | parent's event handler is called correctly, but its child's event is
    | > | envoking the parent's event handler (the same one).
    | > |
    | > | | > | > Hey Steven, I have a problem while working with the same DataList
    | > control.
    | > | > That one problem that caused the wrong event handler to get called
    is
    | > | > happening now. I am working on a different project using the same
    | > control
    | > | > that i got finished on the other project and trying to implement on
    | this
    | > | new
    | > | > project, and it is set up almost the same. The only difference is
    that
    | > on
    | > | > this new one, i have added a postback step before the custom
    datalist
    | > gets
    | > | > loaded.
    | > | >
    | > | > Any ideas as why the wrong event handler is getting called?
    | > | >
    | > | > thanks
    | > | >
    | > | > | > | > > You're welcome TS.
    | > | > >
    | > | > > Glad that you've overcome the problem.
    | > | > >
    | > | > > Regards,
    | > | > >
    | > | > > Steven Cheng
    | > | > > Microsoft Online Support
    | > | > >
    | > | > > Get Secure! www.microsoft.com/security
    | > | > > (This posting is provided "AS IS", with no warranties, and confers
    | no
    | > | > > rights.)
    | > | > > --------------------
    | > | > > | From: "TS" <>
    | > | > > | References: <>
    | > | > > <>
    | > | > > <2rQIZ7$>
    | > | > > <>
    | > | > > <unRs#>
    | > | > > <>
    | > | > > <#>
    | > | > > <$>
    | > | > > <#>
    | > | > > <>
    | > | > > | Subject: Re: explanation of when need to repopulate control
    | > | > > | Date: Mon, 8 Aug 2005 12:50:32 -0500
    | > | > > | Lines: 1445
    | > | > > | X-Priority: 3
    | > | > > | X-MSMail-Priority: Normal
    | > | > > | X-Newsreader: Microsoft Outlook Express 6.00.2800.1158
    | > | > > | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
    | > | > > | Message-ID: <>
    | > | > > | Newsgroups:
    | > microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | > | > > | NNTP-Posting-Host: 103nat100.tea.state.tx.us 198.214.103.100
    | > | > > | Path:
    | > TK2MSFTNGXA01.phx.gbl!TK2MSFTNGP08.phx.gbl!TK2MSFTNGP10.phx.gbl
    | > | > > | Xref: TK2MSFTNGXA01.phx.gbl
    | > | > > microsoft.public.dotnet.framework.aspnet.buildingcontrols:4014
    | > | > > | X-Tomcat-NG:
    | > microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | > | > > |
    | > | > > | Well you were right that it had something to do with the custom
    | > | control.
    | > | > > The
    | > | > > | datalist was trying to load itself during page load. i put the
    | code
    | > in
    | > | > > Init,
    | > | > > | and it worked.
    | > | > > |
    | > | > > | thanks steven
    | > | > > |
    | message
    | > | > > | | > | > > | > Thanks for your followup TS.
    | > | > > | >
    | > | > > | > So can I say that currently your custom webcontrol(not
    template
    | > list
    | > | > > | > control) can correctly be added both statically and
    dynamically
    | in
    | > | the
    | > | > > | > normal DataList or Repeater controls (asp.net buildin ) , but
    | > have
    | > | > some
    | > | > > | > problem for postback events when added in your custom list
    | > control?
    | > | > > | >
    | > | > > | > If so, we should keep focus on the custom datalist control.
    Has
    | it
    | > | any
    | > | > > | > problems when we nest some asp.net buildin controls in it?
    Would
    | > you
    | > | > try
    | > | > > | > making a simplified version of your custom datalist control so
    | > that
    | > | we
    | > | > > can
    | > | > > | > have a view to see whether there is anything wrong in it.
    Also,
    | > | it'll
    | > | > be
    | > | > > | > helpful you also provide the complete code that you
    dynamically
    | > add
    | > | > > | control
    | > | > > | > into the datalist (through reflection).
    | > | > > | >
    | > | > > | > Thanks,
    | > | > > | >
    | > | > > | > Steven Cheng
    | > | > > | > Microsoft Online Support
    | > | > > | >
    | > | > > | > Get Secure! www.microsoft.com/security
    | > | > > | > (This posting is provided "AS IS", with no warranties, and
    | confers
    | > | no
    | > | > > | > rights.)
    | > | > > | >
    | > | > > | > --------------------
    | > | > > | > | From: "TS" <>
    | > | > > | > | References: <>
    | > | > > | > <>
    | > | > > | > <2rQIZ7$>
    | > | > > | > <>
    | > | > > | > <unRs#>
    | > | > > | > <>
    | > | > > | > <#>
    | > | > > | > <$>
    | > | > > | > | Subject: Re: explanation of when need to repopulate control
    | > | > > | > | Date: Fri, 5 Aug 2005 17:19:23 -0500
    | > | > > | > | Lines: 1298
    | > | > > | > | X-Priority: 3
    | > | > > | > | X-MSMail-Priority: Normal
    | > | > > | > | X-Newsreader: Microsoft Outlook Express 6.00.2800.1158
    | > | > > | > | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
    | > | > > | > | Message-ID: <#>
    | > | > > | > | Newsgroups:
    | > | > microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | > | > > | > | NNTP-Posting-Host: 103nat100.tea.state.tx.us 198.214.103.100
    | > | > > | > | Path:
    | > | > TK2MSFTNGXA01.phx.gbl!TK2MSFTNGP08.phx.gbl!TK2MSFTNGP15.phx.gbl
    | > | > > | > | Xref: TK2MSFTNGXA01.phx.gbl
    | > | > > | > microsoft.public.dotnet.framework.aspnet.buildingcontrols:4003
    | > | > > | > | X-Tomcat-NG:
    | > | > microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | > | > > | > |
    | > | > > | > | I have a new problem now. I have figured out that the cause
    is
    | > the
    | > | > > same
    | > | > > | > | reason. If its in the custom DataList, it doesn't work, else
    | it
    | > | does
    | > | > > | work.
    | > | > > | > |
    | > | > > | > | The scenario:
    | > | > > | > | After the initial page load, you enter data into controls
    and
    | > hit
    | > | > > submit
    | > | > > | > | button, the process is as follows:
    | > | > > | > | Page_Load
    | > | > > | > | DataList's OnLoad
    | > | > > | > | Composite Control's OnLoad
    | > | > > | > | Submit button's OnClick - At this point, the controls in the
    | > | > composite
    | > | > > | > | control have no listitems and no selectedValue properties.
    | > | > > | > |
    | > | > > | > | I have statically added the composite control onto the same
    | page
    | > | as
    | > | > > the
    | > | > > | > | dynamic one, so here is the process in this scenario:
    | > | > > | > | Page_Load
    | > | > > | > | Composite Control's OnLoad (The one whose parent is Page)
    | > | > > | > | DataList's OnLoad
    | > | > > | > | Composite Control's OnLoad (The one whose parent is the
    Custom
    | > | > > DataList)
    | > | > > | > | Submit button's OnClick - At this point, the controls in the
    | > | > > statically
    | > | > > | > | declared composite control have listitems and have values
    for
    | > | > > | > selectedValue
    | > | > > | > | properties.
    | > | > > | > |
    | > | > > | > | So the same control at the same time - the one outside the
    | > custom
    | > | > > | Datalist
    | > | > > | > | has its controls' state set up correctly, the ones inside
    does
    | > | not.
    | > | > > | > |
    | > | > > | > | So the same reason is at play here. Maybe since i am
    | dynamically
    | > | > > | creating
    | > | > > | > | the class using reflection (Assembly.CreateInstance()) that
    | has
    | > | > > | something
    | > | > > | > to
    | > | > > | > | do with it?
    | > | > > | > |
    | > | > > | > | Please help mr. Cheng.
    | > | > > | > |
    | > | > > | > | Thank you very much!
    | > | > > | > |
    | > | > > | > | TS
    | > | > > | > |
    | > | > > | > |
    | > | > > | > |
    | > | message
    | > | > > | > | | > | > > | > | > Hi TS,
    | > | > > | > | >
    | > | > > | > | > First, I'm glad that you've got your composite control
    work,
    | > all
    | > | > the
    | > | > > | > | > dropdownlist's postback events can fire correctly,yes?
    | > | > > | > | >
    | > | > > | > | > As for the new problem you encountered when adding your
    | > | composite
    | > | > > | > control
    | > | > > | > | > into DataList's item, is the DataList the asp.net's
    buildin
    | > | > DataList
    | > | > > | > | > control? And since you mentioned that you dynamically add
    | > your
    | > | > > | control
    | > | > > | > | > into it, how do you dynamically add your custom control?
    | Will
    | > | > there
    | > | > > | > occur
    | > | > > | > | > problem if you statically add your control into DataList?
    | > | > > | > | >
    | > | > > | > | > Thanks,
    | > | > > | > | >
    | > | > > | > | > Steven Cheng
    | > | > > | > | > Microsoft Online Support
    | > | > > | > | >
    | > | > > | > | > Get Secure! www.microsoft.com/security
    | > | > > | > | > (This posting is provided "AS IS", with no warranties, and
    | > | confers
    | > | > > no
    | > | > > | > | > rights.)
    | > | > > | > | >
    | > | > > | > | > --------------------
    | > | > > | > | > | From: "TS" <>
    | > | > > | > | > | References: <>
    | > | > > | > | > <>
    | > | > > | > | > <2rQIZ7$>
    | > | > > | > | > <>
    | > | > > | > | > <unRs#>
    | > | > > | > | > <>
    | > | > > | > | > | Subject: Re: explanation of when need to repopulate
    | control
    | > | > > | > | > | Date: Wed, 3 Aug 2005 19:07:16 -0500
    | > | > > | > | > | Lines: 1153
    | > | > > | > | > | X-Priority: 3
    | > | > > | > | > | X-MSMail-Priority: Normal
    | > | > > | > | > | X-Newsreader: Microsoft Outlook Express 6.00.2800.1158
    | > | > > | > | > | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
    | > | > > | > | > | Message-ID: <#>
    | > | > > | > | > | Newsgroups:
    | > | > > | microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | > | > > | > | > | NNTP-Posting-Host: 103nat100.tea.state.tx.us
    | 198.214.103.100
    | > | > > | > | > | Path:
    | > | > > | TK2MSFTNGXA01.phx.gbl!TK2MSFTNGP08.phx.gbl!TK2MSFTNGP14.phx.gbl
    | > | > > | > | > | Xref: TK2MSFTNGXA01.phx.gbl
    | > | > > | > | >
    | microsoft.public.dotnet.framework.aspnet.buildingcontrols:3989
    | > | > > | > | > | X-Tomcat-NG:
    | > | > > | microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | > | > > | > | > |
    | > | > > | > | > | Well Steve, I am almost done. My control works well,
    | except
    | > | its
    | > | > > not
    | > | > > | in
    | > | > > | > | the
    | > | > > | > | > | framework i just mentioned. Adding my control
    dynamically
    | to
    | > | the
    | > | > > | > | > datalist's
    | > | > > | > | > | item may be the root of the cause. i've made sure all
    | custom
    | > | > > | controls
    | > | > > | > | > | implmenet INamingContainer & I think all controls have
    | their
    | > | > id's
    | > | > > | set,
    | > | > > | > | so
    | > | > > | > | > | what else can i do?
    | > | > > | > | > |
    | > | > > | > | > | thanks a bunch
    | > | > > | > | > |
    | > | > > | > | > | | > | > > | > | > | > I have figured the cause of the problem, sort of. My
    | main
    | > | > > control
    | > | > > | > was
    | > | > > | > | > | being
    | > | > > | > | > | > loaded dynamically during a custom data list control's
    | > | > > | ItemDataBound
    | > | > > | > | > | event,
    | > | > > | > | > | > and then added to the e.item.controls collection.
    Once I
    | > | > removed
    | > | > > | it
    | > | > > | > | from
    | > | > > | > | > | > here, the correct event was called in my control. the
    | > | problem
    | > | > > is i
    | > | > > | > | need
    | > | > > | > | > to
    | > | > > | > | > | > keep it where it is because of the way the page works.
    | > | > > | > | > | >
    | > | > > | > | > | > I tried to add INamingContainer to the custom
    Datalist,
    | > but
    | > | > that
    | > | > > | > | didn't
    | > | > > | > | > | > help. Any ideas what could make this happen?
    | > | > > | > | > | >
    | > | > > | > | > | > thanks so much, i know i'm being a pain, but i'm
    stuck!
    | > | > > | > | > | >
    | > | > > | > | > | > This is the custom DataLists' event:
    | > | > > | > | > | > protected override void
    | > | OnItemDataBound(DataListItemEventArgs
    | > | > e)
    | > | > > | > | > | >
    | > | > > | > | > | > {
    | > | > > | > | > | >
    | > | > > | > | > | > base.OnItemDataBound(e);
    | > | > > | > | > | >
    | > | > > | > | > | > Parameter parameter = (Parameter)e.Item.DataItem;
    | > | > > | > | > | >
    | > | > > | > | > | > try
    | > | > > | > | > | >
    | > | > > | > | > | > {
    | > | > > | > | > | >
    | > | > > | > | > | > Control control;
    | > | > > | > | > | >
    | > | > > | > | > | > if(parameter.Type == ParameterType.Control)
    | > | > > | > | > | >
    | > | > > | > | > | > control =
    this.Page.LoadControl(parameter.ControlPath);
    | > | > > | > | > | >
    | > | > > | > | > | > else
    | > | > > | > | > | >
    | > | > > | > | > | > {
    | > | > > | > | > | >
    | > | > > | > | > | > Assembly assembly = parameter.Assembly;
    | > | > > | > | > | >
    | > | > > | > | > | > if(assembly == null)
    | > | > > | > | > | >
    | > | > > | > | > | > {
    | > | > > | > | > | >
    | > | > > | > | > | > // The control didn't declare its own assembly, so use
    | the
    | > | > > | report's
    | > | > > | > | > | > ControlsAssembly
    | > | > > | > | > | >
    | > | > > | > | > | > assembly = this.ControlsAssembly;
    | > | > > | > | > | >
    | > | > > | > | > | > // Ther report's ControlsAssembly is null, so use
    | current
    | > | > page's
    | > | > > | > | > assembly
    | > | > > | > | > | >
    | > | > > | > | > | > if(assembly == null)
    | > | > > | > | > | >
    | > | > > | > | > | > assembly = this.Page.GetType().BaseType.Assembly;
    | > | > > | > | > | >
    | > | > > | > | > | > }
    | > | > > | > | > | >
    | > | > > | > | > | >
    | > | > > | > | > | > control = (Control)
    | > | > > | > | assembly.CreateInstance(parameter.ControlTypeName);
    | > | > > | > | > | >
    | > | > > | > | > | > }
    | > | > > | > | > | >
    | > | > > | > | > | > control.ID = parameter.Name;
    | > | > > | > | > | >
    | > | > > | > | > | > // Set up all the properties of this control from the
    | > | > > | > | > parameter.properties
    | > | > > | > | > | >
    | > | > > | > | > | > foreach(DictionaryEntry de in parameter.Properties)
    | > | > > | > | > | >
    | > | > > | > | > | > SetProperty(de.Key.ToString(), de.Value.ToString(),
    | > | control);
    | > | > > | > | > | >
    | > | > > | > | > | >
    | > | > > | > | > | > e.Item.Controls.Add(control);
    | > | > > | > | > | >
    | > | > > | > | > | > }
    | > | > > | > | > | >
    | > | > > | > | > | > catch (Exception ex)
    | > | > > | > | > | >
    | > | > > | > | > | > {
    | > | > > | > | > | >
    | > | > > | > | > | > throw new ApplicationException("Unable to render
    | criteria.
    | > | > > Reason:
    | > | > > | > " +
    | > | > > | > | > | > ex.Message, ex);
    | > | > > | > | > | >
    | > | > > | > | > | > }
    | > | > > | > | > | >
    | > | > > | > | > | > }
    | > | > > | > | > | >
    | > | > > | > | > | > | > | > > | > | > | > > In testing, i removed the main parent dropdown and
    | only
    | > | left
    | > | > > the
    | > | > > | 2
    | > | > > | > | > below
    | > | > > | > | > | > it.
    | > | > > | > | > | > > this time, the same scenario happened...when the
    child
    | > | > > dropdown
    | > | > > | > list
    | > | > > | > | > | > > autopostsback, it's immediate parent's
    | > | selectedindexchanged
    | > | > > | event
    | > | > > | > | > fires!
    | > | > > | > | > | I
    | > | > > | > | > | > 'm
    | > | > > | > | > | > > starting to pull my hair out now...I"m stuck!
    | > | > > | > | > | > >
    | > | > > | > | > | > > please help superman
    | > | > > | > | > | > >
    | > | > > | > | > | > > | > | > > | > | > | > > > Another problem:
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > while i'm waiting on your remark to my last post,
    i
    | > | > removed
    | > | > > | the
    | > | > > | > | sub
    | > | > > | > | > | > > > composite controls from my composite control so
    that
    | > | there
    | > | > > is
    | > | > > | > only
    | > | > > | > | > | drop
    | > | > > | > | > | > > down
    | > | > > | > | > | > > > lists on it. During CreateChildcontrols, i load
    the
    | > main
    | > | > > drop
    | > | > > | > down
    | > | > > | > | > | using
    | > | > > | > | > | > > > databind. When the page is sent to browser for the
    | > first
    | > | > > time,
    | > | > > | i
    | > | > > | > | > have
    | > | > > | > | > | my
    | > | > > | > | > | > > > main drop down filled. I then select an item and
    its
    | > | > > | > | > | > SelectedIndexChanged
    | > | > > | > | > | > > > fires and populates the send drop down list. Then
    | > when i
    | > | > > | select
    | > | > > | > an
    | > | > > | > | > | item
    | > | > > | > | > | > > from
    | > | > > | > | > | > > > it, it posts back, and the event that gets called
    is
    | > the
    | > | > > | > | main(first)
    | > | > > | > | > | > > > dropdown list's SelectedIndexChanged event, which
    | then
    | > | > > | > | re-populates
    | > | > > | > | > | the
    | > | > > | > | > | > > > second drop down list, then the control returns to
    | the
    | > | > > browser
    | > | > > | > | (The
    | > | > > | > | > | > > > SelectedIndexChanged event never fired for the 2nd
    | > | > > dropdown's
    | > | > > | > | > changed
    | > | > > | > | > | > > > event.???
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > thanks again
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > using System;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > using System.Collections.Specialized;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > using System.Web.UI;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > using System.Web.UI.WebControls;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > using System.Text;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > using OperationsTeams.Business;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > using OperationsTeams.Data;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > using OperationsTeams.Reporting;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > using OperationsTeams.Reporting.WebControls;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > namespace OperationsTeams.Web.ReportControls
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > /// <summary>
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > /// Summary description for FiscalAgentHierarchy.
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > /// </summary>
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > public class FiscalAgentHierarchy : WebControl,
    | > | > > | > | > | IReportParameterControl,
    | > | > > | > | > | > > > INamingContainer
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > public FiscalAgentHierarchy()
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > Parameters.Add(new Parameter("@SchoolYear"));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > Parameters.Add(new Parameter("@ReportingGroup"));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > Parameters.Add(new Parameter("@FiscalAgentID"));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > Parameters.Add(new Parameter("@FundingSourceID"));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > Parameters.Add(new Parameter("@ProviderID"));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > Parameters.Add(new Parameter("@SiteID"));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > Parameters.Add(new Parameter("@ClassID"));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > Parameters["@SchoolYear"].Value = 2006;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > #region Events
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > protected override void OnLoad(EventArgs e)
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > base.OnLoad (e);
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > // The last state of controls from viewstate is
    now
    | > | loaded
    | > | > > | > (Before
    | > | > > | > | > the
    | > | > > | > | > | > > > client data is processed)
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > protected override void OnPreRender(EventArgs e)
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > base.OnPreRender (e);
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > // The controls now have the client values from
    the
    | > the
    | > | > last
    | > | > > | > | > postback
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > // ddlFundingSource.Visible =
    FundingSourceVisible;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > // ddlProviders.Visible = ProviderVisible;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > // ddlSites.Visible = SiteVisible;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > // ddlClasses.Visible = ClassVisible;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > // ddlSites.Items.Add(new ListItem("help","1"));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > // ddlSites.Items.Add(new ListItem("me","2"));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > // ddlSites.Visible = true;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > private void
    | > | > > | > rysReportingYearSelector_ReportingYearChanged(object
    | > | > > | > | > | > sender,
    | > | > > | > | > | > > > EventArgs e)
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > // this.LoadFundingSource();
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > // this.LoadProviders();
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > private void
    | fasFiscalAgent_FiscalAgentChanged(object
    | > | > > sender,
    | > | > > | > | > | EventArgs
    | > | > > | > | > | > e)
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > this.LoadFundingSource();
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > this.LoadProviders();
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > private void
    | > | ddlFundingSource_SelectedIndexChanged(object
    | > | > > | > sender,
    | > | > > | > | > | > > EventArgs
    | > | > > | > | > | > > > e)
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > LoadSites();
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > private void
    | ddlProviders_SelectedIndexChanged(object
    | > | > > sender,
    | > | > > | > | > | EventArgs
    | > | > > | > | > | > e)
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > LoadSites();
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > private void ddlSites_SelectedIndexChanged(object
    | > | sender,
    | > | > > | > | EventArgs
    | > | > > | > | > e)
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > LoadClasses();
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > #endregion
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > protected override void CreateChildControls()
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > this.ddlFundingSource = new DropDownList();
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > this.ddlProviders = new DropDownList();
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > this.ddlSites = new DropDownList();
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > this.ddlClasses = new DropDownList();
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ddlFundingSource.ID = FundingSourceControlId;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ddlProviders.ID = ProvidersControlId;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ddlSites.ID = SitesControlId;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ddlClasses.ID = ClassesControlId;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > LoadProviders();
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > // start containing table
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > this.Controls.Add(WebHelper.MakeLiteral("<table
    | > | > > cellpadding=0
    | > | > > | > | > | > > > cellspacing=0><tr><td>"));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > this.Controls.Add(WebHelper.MakeLiteral("<table><tr><td>"));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > // this.Controls.Add(rysReportingYearSelector);
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > > | this.Controls.Add(WebHelper.MakeLiteral("</td></tr></table>"));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > > | this.Controls.Add(WebHelper.MakeLiteral("</td></tr><tr><td>"));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > this.Controls.Add(WebHelper.MakeLiteral("<table><tr><td>"));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > // this.Controls.Add(fasFiscalAgent);
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > > | this.Controls.Add(WebHelper.MakeLiteral("</td></tr></table>"));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > > | this.Controls.Add(WebHelper.MakeLiteral("</td></tr><tr><td>"));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > > | this.Controls.Add(WebHelper.MakeLiteral("<table><tr><td>Funding
    | > | > > | > | > | > > > Source</td><td>"));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > this.Controls.Add(ddlFundingSource);
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > > | this.Controls.Add(WebHelper.MakeLiteral("</td></tr></table>"));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > > | this.Controls.Add(WebHelper.MakeLiteral("</td></tr><tr><td>"));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > > | > | > | > >
    | > | > > | > | > | >
    | > | > > | > | > |
    | > | > > | > | >
    | > | > > | > |
    | > | > > | >
    | > | > > |
    | > | > >
    | > | >
    | > |
    | >
    |
    this.Controls.Add(WebHelper.MakeLiteral("<table><tr><td>Providers</td><td>")
    | > | > > | > | > | > > > );
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > this.Controls.Add(ddlProviders);
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > > | this.Controls.Add(WebHelper.MakeLiteral("</td></tr></table>"));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > > | this.Controls.Add(WebHelper.MakeLiteral("</td></tr><tr><td>"));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > > | > | > | >
    | > | > > | > | >
    | > | > > | >
    | > | > >
    | > |
    | this.Controls.Add(WebHelper.MakeLiteral("<table><tr><td>Sites</td><td>"));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > this.Controls.Add(ddlSites);
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > > | this.Controls.Add(WebHelper.MakeLiteral("</td></tr></table>"));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > > | this.Controls.Add(WebHelper.MakeLiteral("</td></tr><tr><td>"));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > > | > | > | > >
    | > | > > | > | > | >
    | > | > > | > | > |
    | > | > > | > | >
    | > | > > | > |
    | > | > > | >
    | > | > > |
    | > | > >
    | > | >
    | > |
    | >
    |
    this.Controls.Add(WebHelper.MakeLiteral("<table><tr><td>Classes</td><td>"));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > this.Controls.Add(ddlClasses);
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > > | this.Controls.Add(WebHelper.MakeLiteral("</td></tr></table>"));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > // end containing table
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > > | this.Controls.Add(WebHelper.MakeLiteral("</td></tr></table>"));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ddlFundingSource.SelectedIndexChanged += new
    | > | > > | > | > | > > >
    EventHandler(ddlFundingSource_SelectedIndexChanged);
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ddlProviders.SelectedIndexChanged += new
    | > | > > | > | > | > > > EventHandler(ddlProviders_SelectedIndexChanged);
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ddlSites.SelectedIndexChanged += new
    | > | > > | > | > | > > > EventHandler(ddlSites_SelectedIndexChanged);
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ddlFundingSource.AutoPostBack =
    | > | ddlProviders.AutoPostBack
    | > | > =
    | > | > > | > | > | > > > ddlSites.AutoPostBack = true;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > private void LoadFundingSource()
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > int fiscalAgentId =
    | > | > > | > 1;//this.fasFiscalAgent.SelectedFiscalAgentId;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > if(fiscalAgentId != int.MinValue)
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > FundingSourceVisible = true;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > this.ddlFundingSource.DataSource =
    | > | > > | > | > | > FiscalAgentFunding.Find(fiscalAgentId);
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > this.ddlFundingSource.DataTextField =
    | > | "ShortDescription";
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > this.ddlFundingSource.DataValueField = "CodeId";
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > this.ddlFundingSource.DataBind();
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > if(this.ddlFundingSource.Items.Count > 1)
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > this.ddlFundingSource.Items.Insert(0, new
    | > | > > | ListItem(string.Empty,
    | > | > > | > | > | > > > string.Empty));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > else
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > FundingSourceVisible = false;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > private void LoadProviders()
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > int fiscalAgentId =
    | > | > > 1;//fasFiscalAgent.SelectedFiscalAgentId;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > if(fiscalAgentId != int.MinValue)
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > // ddlSites.Items.Add(new ListItem("help","1"));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > // ddlSites.Items.Add(new ListItem("me","2"));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ProviderVisible = true;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > // are these dates
    | correct???????????????????????????
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ddlProviders.DataSource =
    | > | > > | > FiscalAgentProvider.Find(fiscalAgentId,
    | > | > > | > | > new
    | > | > > | > | > | > > > DateTime(2005,7,1), new
    | > | > > | > | > | > > >
    | > | > > | > | > |
    | > | > > | >
    | > | >
    | DateTime(2006,6,30));//rysReportingYearSelector.ReportingYearStartDate,
    | > | > > | > | > | > > > rysReportingYearSelector.ReportingYearEndDate); //
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ddlProviders.DataTextField = "ProviderName";
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ddlProviders.DataValueField = "ProviderId";
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ddlProviders.DataBind();
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ddlProviders.Items.Insert(0, new
    | > ListItem(string.Empty,
    | > | > > | > | > | string.Empty));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > else
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > this.ddlProviders.Items.Clear();
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ProviderVisible = false;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > // LoadSites();
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > private void LoadSites()
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > if(ddlProviders.SelectedValue != string.Empty)
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > // Load the Site search parameters.
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > SiteFindArgs siteFindArgs=new SiteFindArgs();
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > siteFindArgs.FiscalAgentId=1;
    | > | > > | > | > | > > >
    | > //Convert.ToInt32(fasFiscalAgent.SelectedFiscalAgentId);
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > SiteVisible = true;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ddlSites.DataSource =
    | > Business.Site.Find(siteFindArgs);
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ddlSites.DataTextField = "Name";
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ddlSites.DataValueField = "SiteId";
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ddlSites.DataBind();
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ddlSites.Items.Insert(0, new
    ListItem(string.Empty,
    | > | > > | > | string.Empty));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > else
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ddlSites.Items.Clear();
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > SiteVisible = false;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > // LoadClasses();
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > private void LoadClasses()
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > if(ddlSites.SelectedValue != string.Empty)
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > AdultEdClassFindArgs adultEdClassFindArgs = new
    | > | > > | > | > | AdultEdClassFindArgs();
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > // adultEdClassFindArgs.FiscalAgentId =
    | > | > > | > | > | > > >
    | Convert.ToInt32(fasFiscalAgent.SelectedFiscalAgentId);
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > // adultEdClassFindArgs.ReportingYearStartDate =
    | > | > > | > | > | > > > rysReportingYearSelector.ReportingYearStartDate;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > // adultEdClassFindArgs.ReportingYearEndDate =
    | > | > > | > | > | > > > rysReportingYearSelector.ReportingYearEndDate;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > // adultEdClassFindArgs.ProviderName =
    | > | > > | > ddlProviders.SelectedValue;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > // adultEdClassFindArgs.SiteName =
    | > | ddlSites.SelectedValue;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ClassVisible = true;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ddlClasses.DataSource =
    | > | > > | AdultEdClass.Find(adultEdClassFindArgs);
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ddlClasses.DataTextField = "Name";
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ddlClasses.DataValueField = "ClassId";
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ddlClasses.DataBind();
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ddlClasses.Items.Insert(0, new
    | ListItem(string.Empty,
    | > | > > | > | > string.Empty));
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > else
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ddlClasses.Items.Clear();
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ClassVisible = false;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > #region Public Properties
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > #region IReportParameterControl Members
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > public object ParameterValue
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > get{ return null; }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > set{ /*do nothing */ }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > public ParameterCollection Parameters
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > get{ return parameters; }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > set{ parameters = value;}
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > #endregion
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > protected bool FundingSourceVisible
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > get
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > if(ViewState["FundingSourceVisible"] == null)
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > return false;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > return (bool)ViewState["FundingSourceVisible"];
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > set
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > TrackViewState();
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ViewState["FundingSourceVisible"] = value;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > protected bool ProviderVisible
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > get
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > if(ViewState["ProviderVisible"] == null)
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > return false;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > return (bool)ViewState["ProviderVisible"];
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > set
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > TrackViewState();
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ViewState["ProviderVisible"] = value;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > protected bool SiteVisible
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > get
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > if(ViewState["SiteVisible"] == null)
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > return false;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > return (bool)ViewState["SiteVisible"];
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > set
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > TrackViewState();
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ViewState["SiteVisible"] = value;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > protected bool ClassVisible
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > get
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > if(ViewState["ClassVisible"] == null)
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > return false;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > return (bool)ViewState["ClassVisible"];
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > set
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > {
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > TrackViewState();
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > ViewState["ClassVisible"] = value;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > #endregion
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > #region Private Member Variables
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > private DropDownList ddlFundingSource;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > private DropDownList ddlProviders;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > private DropDownList ddlSites;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > private DropDownList ddlClasses;
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > private ParameterCollection parameters = new
    | > | > > | > | ParameterCollection();
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > #endregion
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > #region Private Constants
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > private const string
    ReportingYearSelectorControlId
    | =
    | > | > > | > | > | > > > "rysReportingYearSelector";
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > private const string FiscalAgentSelectorControlId
    =
    | > | > > | > | > | > > > "fasFiscalAgentSelector";
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > private const string FundingSourceControlId =
    | > | > > | > "ddlFundingSource";
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > private const string FundingSourceLabelControlId =
    | > | > > | > | > "lblFundingSource";
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > private const string ProvidersControlId =
    | > | "ddlProviders";
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > private const string ProvidersLabelControlId =
    | > | > > "lblProviders";
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > private const string SitesControlId = "ddlSites";
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > private const string SitesLabelControlId =
    | "lblSites";
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > private const string ClassesControlId =
    | "ddlClasses";
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > private const string ClassesLabelControlId =
    | > | "lblClasses";
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > #endregion
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > }
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > > | > | > | > > > "Steven Cheng[MSFT]"
    <>
    | > | wrote
    | > | > in
    | > | > > | > | message
    | > | > > | > | > | > > > | > | > > | > | > | > > > > Hi TS,
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > See you again :), seems you're rushing in a
    | asp.net
    | > | > > project
    | > | > > | > | these
    | > | > > | > | > | > days?
    | > | > > | > | > | > > > > For the question you mentioned in this post,
    here
    | > are
    | > | > some
    | > | > > | of
    | > | > > | > my
    | > | > > | > | > | > > > > understanding and suggestions:
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > 1. ASP.NET controls derived from Control will
    | > | > > automatically
    | > | > > | > | > maintain
    | > | > > | > | > | > its
    | > | > > | > | > | > > > > ViewStates according to the asp.net web page's
    | > events
    | > | > > | > sequence.
    | > | > > | > | So
    | > | > > | > | > | for
    | > | > > | > | > | > > > > composite control, those nested sub Controls'
    | status
    | > | > > | > (properties
    | > | > > | > | > | which
    | > | > > | > | > | > > be
    | > | > > | > | > | > > > > persistd in Viewsstate ) will be store and
    | retrieve
    | > | > > | > | automatically.
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > 2. However, there're some thing we need to care
    | when
    | > | > > | building
    | > | > > | > | > | > composite
    | > | > > | > | > | > > > > control:
    | > | > > | > | > | > > > > #remember to implement INamingContainer for
    | controls
    | > | > which
    | > | > > | > will
    | > | > > | > | > have
    | > | > > | > | > | > > > nested
    | > | > > | > | > | > > > > sub controls. Otherwise, even handler mapping,
    | > | ViewState
    | > | > > | > loading
    | > | > > | > | > | will
    | > | > > | > | > | > > > occur
    | > | > > | > | > | > > > > unexpectedly.
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > #Do remember to assign a explicit ID for each
    sub
    | > | > > | > controls(same
    | > | > > | > | > | reason
    | > | > > | > | > | > > as
    | > | > > | > | > | > > > > #1). Also, please always try best to add
    | subcontrols
    | > | in
    | > | > > the
    | > | > > | > | > | > > > > "CreateChildControls" method(just create control
    | > | > > hierarchy)
    | > | > > | > and
    | > | > > | > | > put
    | > | > > | > | > | > > > > manipulating code in postback event or
    PreRender
    | > | event.
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > In addition, for your detaile scenario, I've
    just
    | > | built
    | > | > a
    | > | > > | very
    | > | > > | > | > | simple
    | > | > > | > | > | > > demo
    | > | > > | > | > | > > > > control which have three dropdownlists and The
    | > "Top"
    | > | > one
    | > | > > | will
    | > | > > | > | > | display
    | > | > > | > | > | > > > > first(other twos invisible) and according to the
    | top
    | > | > one's
    | > | > > | > | > | selection,
    | > | > > | > | > | > > the
    | > | > > | > | > | > > > > "Mid" dropdownlist will be pouplated and the
    same
    | > when
    | > | > the
    | > | > > | > | "mid"'s
    | > | > > | > | > | > > > > selection changed......
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > Here's the control's code for your reference:
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > =========================
    | > | > > | > | > | > > > > [DefaultProperty("Text"),
    | > | > > | > | > | > > > > ToolboxData("<{0}:MultiListControl
    | > | > > | > | > | > > runat=server></{0}:MultiListControl>")]
    | > | > > | > | > | > > > > public class MultiListControl :
    | > | > > | > | > | System.Web.UI.WebControls.WebControl,
    | > | > > | > | > | > > > > INamingContainer
    | > | > > | > | > | > > > > {
    | > | > > | > | > | > > > > private string text;
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > private DropDownList lstTop;
    | > | > > | > | > | > > > > private DropDownList lstMid;
    | > | > > | > | > | > > > > private DropDownList lstBot;
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > protected bool MidVisible
    | > | > > | > | > | > > > > {
    | > | > > | > | > | > > > > get{
    | > | > > | > | > | > > > > if(ViewState["MID_VISIBLE"] == null)
    | > | > > | > | > | > > > > {
    | > | > > | > | > | > > > > return false;
    | > | > > | > | > | > > > > }
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > return (bool)ViewState["MID_VISIBLE"];
    | > | > > | > | > | > > > > }
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > set{
    | > | > > | > | > | > > > > TrackViewState();
    | > | > > | > | > | > > > > ViewState["MID_VISIBLE"] = value;
    | > | > > | > | > | > > > > }
    | > | > > | > | > | > > > > }
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > protected bool BotVisible
    | > | > > | > | > | > > > > {
    | > | > > | > | > | > > > > get
    | > | > > | > | > | > > > > {
    | > | > > | > | > | > > > > if(ViewState["BOT_VISIBLE"] == null)
    | > | > > | > | > | > > > > {
    | > | > > | > | > | > > > > return false;
    | > | > > | > | > | > > > > }
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > return (bool)ViewState["BOT_VISIBLE"];
    | > | > > | > | > | > > > > }
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > set
    | > | > > | > | > | > > > > {
    | > | > > | > | > | > > > > TrackViewState();
    | > | > > | > | > | > > > > ViewState["BOT_VISIBLE"] = value;
    | > | > > | > | > | > > > > }
    | > | > > | > | > | > > > > }
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > [Bindable(true),
    | > | > > | > | > | > > > > Category("Appearance"),
    | > | > > | > | > | > > > > DefaultValue("")]
    | > | > > | > | > | > > > > public string Text
    | > | > > | > | > | > > > > {
    | > | > > | > | > | > > > > get
    | > | > > | > | > | > > > > {
    | > | > > | > | > | > > > > return text;
    | > | > > | > | > | > > > > }
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > set
    | > | > > | > | > | > > > > {
    | > | > > | > | > | > > > > text = value;
    | > | > > | > | > | > > > > }
    | > | > > | > | > | > > > > }
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > protected override void CreateChildControls()
    | > | > > | > | > | > > > > {
    | > | > > | > | > | > > > > Controls.Clear();
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > Controls.Add(
    | > | > > | > | > | > > > > new LiteralControl(
    | > | > > | > | > | > > > > @"
    | > | > > | > | > | > > > > <table width='100%'>
    | > | > > | > | > | > > > > <tr><td>
    | > | > > | > | > | > > > > "));
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > lstTop = new DropDownList();
    | > | > > | > | > | > > > > lstTop.ID = "lstTop";
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > lstTop.Items.Add("----------");
    | > | > > | > | > | > > > > lstTop.Items.Add("Top_Item_1");
    | > | > > | > | > | > > > > lstTop.Items.Add("Top_Item_2");
    | > | > > | > | > | > > > > lstTop.Items.Add("Top_Item_3");
    | > | > > | > | > | > > > > lstTop.Items.Add("Top_Item_4");
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > Controls.Add(lstTop);
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > Controls.Add(
    | > | > > | > | > | > > > > new LiteralControl(
    | > | > > | > | > | > > > > @"<br/>"
    | > | > > | > | > | > > > > ));
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > lstMid = new DropDownList();
    | > | > > | > | > | > > > > lstMid.ID = "lstMid";
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > Controls.Add(lstMid);
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > Controls.Add(
    | > | > > | > | > | > > > > new LiteralControl(
    | > | > > | > | > | > > > > @"<br/>"
    | > | > > | > | > | > > > > ));
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > lstBot = new DropDownList();
    | > | > > | > | > | > > > > lstBot.ID = "lstBot";
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > Controls.Add(lstBot);
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > Controls.Add(
    | > | > > | > | > | > > > > new LiteralControl(
    | > | > > | > | > | > > > > @"
    | > | > > | > | > | > > > > </td></tr>
    | > | > > | > | > | > > > > </table>
    | > | > > | > | > | > > > > "
    | > | > > | > | > | > > > > ));
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > lstTop.SelectedIndexChanged +=new
    | > | > > | > | > | > > EventHandler(lst_SelectedIndexChanged);
    | > | > > | > | > | > > > > lstMid.SelectedIndexChanged +=new
    | > | > > | > | > | > > EventHandler(lst_SelectedIndexChanged);
    | > | > > | > | > | > > > > lstBot.SelectedIndexChanged +=new
    | > | > > | > | > | > > EventHandler(lst_SelectedIndexChanged);
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > lstTop.AutoPostBack = lstMid.AutoPostBack =
    | > | > > | > lstBot.AutoPostBack
    | > | > > | > | =
    | > | > > | > | > | > true;
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > }
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > protected override void OnPreRender(EventArgs e)
    | > | > > | > | > | > > > > {
    | > | > > | > | > | > > > > base.OnPreRender (e);
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > lstMid.Visible = MidVisible;
    | > | > > | > | > | > > > > lstBot.Visible = BotVisible;
    | > | > > | > | > | > > > > }
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > private void lst_SelectedIndexChanged(object
    | sender,
    | > | > > | > | > | System.EventArgs
    | > | > > | > | > | > e)
    | > | > > | > | > | > > > > {
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > DropDownList lst = sender as DropDownList;
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > switch(lst.ID)
    | > | > > | > | > | > > > > {
    | > | > > | > | > | > > > > case "lstTop":
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > if(lst.SelectedIndex != 0)
    | > | > > | > | > | > > > > {
    | > | > > | > | > | > > > > lstMid.DataSource =
    | GetSubItems(lst.SelectedValue);
    | > | > > | > | > | > > > > lstMid.DataTextField = "Text";
    | > | > > | > | > | > > > > lstMid.DataValueField= "Value";
    | > | > > | > | > | > > > > lstMid.DataBind();
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > MidVisible = true;
    | > | > > | > | > | > > > > }
    | > | > > | > | > | > > > > else
    | > | > > | > | > | > > > > {
    | > | > > | > | > | > > > > MidVisible = BotVisible = false;
    | > | > > | > | > | > > > > }
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > break;
    | > | > > | > | > | > > > > case "lstMid":
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > lstBot.DataSource =
    | GetSubItems(lst.SelectedValue);
    | > | > > | > | > | > > > > lstBot.DataTextField = "Text";
    | > | > > | > | > | > > > > lstBot.DataValueField= "Value";
    | > | > > | > | > | > > > > lstBot.DataBind();
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > MidVisible = BotVisible = true;
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > break;
    | > | > > | > | > | > > > > case "lstBot":
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > break;
    | > | > > | > | > | > > > > }
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > Page.Response.Write("<br>" + lst.ID +
    | > | > > | > "_selectedindexchanged!" +
    | > | > > | > | > | > > > > lst.EnableViewState);
    | > | > > | > | > | > > > > }
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > #region --Helper functions---
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > public ListItemCollection GetSubItems(string
    | parent)
    | > | > > | > | > | > > > > {
    | > | > > | > | > | > > > > ListItemCollection items = new
    | ListItemCollection();
    | > | > > | > | > | > > > > int count = parent.Length;
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > for(int i=0;i<count;++i)
    | > | > > | > | > | > > > > {
    | > | > > | > | > | > > > > items.Add(parent + "_Item_" + i);
    | > | > > | > | > | > > > > }
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > return items;
    | > | > > | > | > | > > > > }
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > #endregion
    | > | > > | > | > | > > > > }
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > ========================
    | > | > > | > | > | > > > > Hope helps. Thanks,
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > Steven Cheng
    | > | > > | > | > | > > > > Microsoft Online Support
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > Get Secure! www.microsoft.com/security
    | > | > > | > | > | > > > > (This posting is provided "AS IS", with no
    | > warranties,
    | > | > and
    | > | > > | > | confers
    | > | > > | > | > | no
    | > | > > | > | > | > > > > rights.)
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > > > --------------------
    | > | > > | > | > | > > > > | From: "TS" <>
    | > | > > | > | > | > > > > | References:
    | > <>
    | > | > > | > | > | > > > > | Subject: Re: explanation of when need to
    | > repopulate
    | > | > > | control
    | > | > > | > | > | > > > > | Date: Tue, 2 Aug 2005 18:32:23 -0500
    | > | > > | > | > | > > > > | Lines: 39
    | > | > > | > | > | > > > > | X-Priority: 3
    | > | > > | > | > | > > > > | X-MSMail-Priority: Normal
    | > | > > | > | > | > > > > | X-Newsreader: Microsoft Outlook Express
    | > | 6.00.2800.1158
    | > | > > | > | > | > > > > | X-MimeOLE: Produced By Microsoft MimeOLE
    | > | > V6.00.2800.1165
    | > | > > | > | > | > > > > | Message-ID:
    | > <>
    | > | > > | > | > | > > > > | Newsgroups:
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > >
    | > | > > | > | > | > >
    | > | > > | > | > | >
    | > | > > | > | > |
    | > | > > | > | >
    | > | > > | > |
    | > | > > | >
    | > | > > |
    | > | > >
    | > | >
    | > |
    | >
    |
    microsoft.public.dotnet.framework.aspnet.webcontrols,microsoft.public.dotnet
    | > | > > | > | > | > > > > framework.aspnet.buildingcontrols
    | > | > > | > | > | > > > > | NNTP-Posting-Host: 103nat100.tea.state.tx.us
    | > | > > | 198.214.103.100
    | > | > > | > | > | > > > > | Path:
    | > | > > | > | > | >
    | > | > TK2MSFTNGXA01.phx.gbl!TK2MSFTNGP08.phx.gbl!TK2MSFTNGP10.phx.gbl
    | > | > > | > | > | > > > > | Xref: TK2MSFTNGXA01.phx.gbl
    | > | > > | > | > | > > > >
    | > | > > | microsoft.public.dotnet.framework.aspnet.buildingcontrols:3979
    | > | > > | > | > | > > > >
    | > | > microsoft.public.dotnet.framework.aspnet.webcontrols:10243
    | > | > > | > | > | > > > > | X-Tomcat-NG:
    | > | > > | > | > | >
    | microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | > | > > | > | > | > > > > |
    | > | > > | > | > | > > > > | sorry, heres the scenario i'm trying to
    | > accomplish:
    | > | > > | > | > | > > > > | I have a composite control that contains 4
    drop
    | > down
    | > | > > | lists.
    | > | > > | > | When
    | > | > > | > | > | the
    | > | > > | > | > | > > > page
    | > | > > | > | > | > > > > | loads initially, i want the first drop down
    | filled
    | > | and
    | > | > > the
    | > | > > | > | rest
    | > | > > | > | > | > > > invisible.
    | > | > > | > | > | > > > > | When you select an item in this ddl, it posts
    | back
    | > | to
    | > | > > the
    | > | > > | > | server
    | > | > > | > | > | and
    | > | > > | > | > | > > > based
    | > | > > | > | > | > > > > | on its value, it populates its immediate
    child's
    | > | drop
    | > | > > down
    | > | > > | > | list.
    | > | > > | > | > | So
    | > | > > | > | > | > > now
    | > | > > | > | > | > > > > the
    | > | > > | > | > | > > > > | top ddl has a value selected and the 2nd one
    | just
    | > | has
    | > | > > its
    | > | > > | > | items
    | > | > > | > | > | > > > populated.
    | > | > > | > | > | > > > > | Then when the 2nd drop down list gets
    selected,
    | it
    | > | > posts
    | > | > > | to
    | > | > > | > | the
    | > | > > | > | > | > server
    | > | > > | > | > | > > > and
    | > | > > | > | > | > > > > | its value is used to populate(filter) the
    items
    | > for
    | > | > the
    | > | > > | 3rd
    | > | > > | > | drop
    | > | > > | > | > | > down
    | > | > > | > | > | > > > > | list...and so on for each drop down list.
    | > | > > | > | > | > > > > |
    | > | > > | > | > | > > > > | Please tell me what i need to do to handle
    post
    | > back
    | > | > > data
    | > | > > | > and
    | > | > > | > | > | > maintain
    | > | > > | > | > | > > > > state
    | > | > > | > | > | > > > > | from one postback to another while keeping the
    | > drop
    | > | > > | > downlists
    | > | > > | > | > | filled
    | > | > > | > | > | > > and
    | > | > > | > | > | > > > > | their values persisted.
    | > | > > | > | > | > > > > |
    | > | > > | > | > | > > > > | thank you again!
    | > | > > | > | > | > > > > |
    | > | > > | > | > | > > > > |
    | message
    | > | > > | > | > | > > > > | | > | > > | > | > | > > > > | > I have a quesiton:
    | > | > > | > | > | > > > > | > if i have a composite control and on its
    | intial
    | > | page
    | > | > > | > | loading,
    | > | > > | > | > i
    | > | > > | > | > | > fill
    | > | > > | > | > | > > > my
    | > | > > | > | > | > > > > | (sub
    | > | > > | > | > | > > > > | > control) drop down list's items collection
    | from
    | > | the
    | > | > > | > database
    | > | > > | > | > and
    | > | > > | > | > | > > > return.
    | > | > > | > | > | > > > > | > When the user hits a button to cause
    postback,
    | > the
    | > | > > | control
    | > | > > | > | is
    | > | > > | > | > | > going
    | > | > > | > | > | > > to
    | > | > > | > | > | > > > > get
    | > | > > | > | > | > > > > | > initialized, then does its items collection
    | > that i
    | > | > > | filled
    | > | > > | > on
    | > | > > | > | > the
    | > | > > | > | > | > > > initial
    | > | > > | > | > | > > > > | > page request get repopulated from viewstate?
    | And
    | > | on
    | > | > > top
    | > | > > | of
    | > | > > | > | > that,
    | > | > > | > | > | > if
    | > | > > | > | > | > > > so,
    | > | > > | > | > | > > > > | does
    | > | > > | > | > | > > > > | > the list item that person selected in the
    drop
    | > | down
    | > | > > list
    | > | > > | > | again
    | > | > > | > | > | set
    | > | > > | > | > | > > > > itself
    | > | > > | > | > | > > > > | as
    | > | > > | > | > | > > > > | > the selected item in the list?
    | > | > > | > | > | > > > > | >
    | > | > > | > | > | > > > > | > OR do i have to re-load the items on every
    | page
    | > | > > request
    | > | > > | > and
    | > | > > | > | > then
    | > | > > | > | > | > > > > populate
    | > | > > | > | > | > > > > | > its value some other way???
    | > | > > | > | > | > > > > | >
    | > | > > | > | > | > > > > | > thanks a bunch
    | > | > > | > | > | > > > > | >
    | > | > > | > | > | > > > > | >
    | > | > > | > | > | > > > > |
    | > | > > | > | > | > > > > |
    | > | > > | > | > | > > > > |
    | > | > > | > | > | > > > >
    | > | > > | > | > | > > >
    | > | > > | > | > | > > >
    | > | > > | > | > | > >
    | > | > > | > | > | > >
    | > | > > | > | > | >
    | > | > > | > | > | >
    | > | > > | > | > |
    | > | > > | > | > |
    | > | > > | > | > |
    | > | > > | > | >
    | > | > > | > |
    | > | > > | > |
    | > | > > | > |
    | > | > > | >
    | > | > > |
    | > | > > |
    | > | > > |
    | > | > >
    | > | >
    | > | >
    | > |
    | > |
    | > |
    | >
    |
    |
    |
     
    Steven Cheng[MSFT], Aug 19, 2005
    #26
  7. TS

    TS Guest

    Steven, I have fixed this problem by overriding the following:

    protected override void LoadViewState(object savedState)
    {
    base.LoadViewState (savedState);
    if (this.Page.IsPostBack && this.parameters != null)
    {
    DataBind();
    }
    }

    I don't fully understand why it now works, i was hoping you could shed some
    light on it. It has something to do with the state of the nested controls in
    the datalist needing to be initiated before its viewstate and postbackdata
    was loaded.

    thanks
     
    TS, Aug 23, 2005
    #27
  8. TS

    TS Guest

    Same subject different control:

    I have a control that is inheriting from listbox. I also declare a
    dropdownlist and populate both of them when overriding onInit. I can't get
    the postback values to get reset up after postback (there are other controls
    on the page that intiate a postback that doesn't effect this control, but
    this control still needs to keep its state)

    using System;
    using System.Collections;
    using System.Collections.Specialized;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Text;
    using TEA.CIS.BusinessObjects;

    using TEA.Teams.Reporting;
    using TEA.Teams.Reporting.WebControls;
    namespace TEA.CIS.Web
    {
    /// <summary>
    /// Summary description for GradeLevel.
    /// </summary>
    public class GradeLevel : ListBox, INamingContainer
    {
    private DropDownList ddlGradeLevel = new DropDownList();

    public GradeLevel()
    {
    }

    protected override void OnInit(EventArgs e)
    {
    base.OnInit (e);

    // Load in onInit so that its state can be reset after this event (before
    page_Load)
    CodeCache.PopulateListWithCodes(this, CodeCacheTable.GradeLevelCodes);
    this.Items.Insert(0, new ListItem("ALL", string.Empty));
    this.SelectedIndex = 0;

    foreach(ListItem item in this.Items)
    ddlGradeLevel.Items.Add(item);

    ddlGradeLevel.SelectedIndex = 0;

    // ViewState["ddl"] = ddlGradeLevel.Items;
    }


    /// <summary>
    /// Overide Render Control to display listbox or dropdownlist.
    /// </summary>
    /// <param name="writer"></param>
    protected override void Render(HtmlTextWriter writer)
    {
    writer.Write("<table cellspacing=\"0\" cellpadding=\"2\" width=\"100%\">");
    writer.Write("<tr><td class=\"reportCriteria\" align=right>Grade
    Level:</td><td width=\"100%\" class=\"reportCriteria\">");

    if (this.SelectionMode == ListSelectionMode.Multiple)
    {
    base.Render (writer);
    }
    else
    {
    ddlGradeLevel.RenderControl(writer);
    }

    writer.Write("</td></tr></table>");
    }
    }
    }
     
    TS, Aug 23, 2005
    #28
  9. Hi TS,

    As for your former problem, I'm not sure on the actual things which makes
    the modification you mentioned resolve it from a genreal view. I shall
    have some further investigation on the control.
    For the new question you mentioned, I'm afraid I don't think your current
    implementation is a good one. For your scenario, you'd like to display a
    dropdownlist or listbox depending on the selectmode property, the
    reasonable approach should be:

    use the CreateChildControl rather than Render method to construct the
    Control. And depend on the "SelectMode" property, we determine whether to
    create the DropDownList or ListBox and add it into the Controls collection.
    (note, this is the key point, any control we'd like to display and have
    events to deal with should be added into the composite control's control
    structure )

    Also, for databinding, I suggest you also override the "DataBind" method so
    as to determine whether to bind data with the DropDownList or ListBox.

    If you feel necessary, I can try building a simple demo control, but this
    may take some time. :). Please feel free to let me know if you have
    anything unclear. Thanks,

    Steven Cheng
    Microsoft Online Support

    Get Secure! www.microsoft.com/security
    (This posting is provided "AS IS", with no warranties, and confers no
    rights.)



    --------------------
    | Thread-Topic: explanation of when need to repopulate control
    | thread-index: AcWoK5i0esAV8aFYTKWM0/C21agehA==
    | X-WBNR-Posting-Host: 198.214.101.80
    | From: "=?Utf-8?B?VFM=?=" <>
    | References: <>
    <>
    <2rQIZ7$>
    <>
    <unRs#>
    <>
    <#>
    <$>
    <#>
    <>
    <>
    <>
    | Subject: Re: explanation of when need to repopulate control
    | Date: Tue, 23 Aug 2005 14:42:45 -0700
    | Lines: 379
    | Message-ID: <>
    | MIME-Version: 1.0
    | Content-Type: text/plain;
    | charset="Utf-8"
    | Content-Transfer-Encoding: 7bit
    | X-Newsreader: Microsoft CDO for Windows 2000
    | Content-Class: urn:content-classes:message
    | Importance: normal
    | Priority: normal
    | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.0
    | Newsgroups: microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | NNTP-Posting-Host: TK2MSFTNGXA03.phx.gbl 10.40.2.250
    | Path: TK2MSFTNGXA01.phx.gbl!TK2MSFTNGP08.phx.gbl!TK2MSFTNGXA03.phx.gbl
    | Xref: TK2MSFTNGXA01.phx.gbl
    microsoft.public.dotnet.framework.aspnet.buildingcontrols:4097
    | X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.buildingcontrols
    |
    | Same subject different control:
    |
    | I have a control that is inheriting from listbox. I also declare a
    | dropdownlist and populate both of them when overriding onInit. I can't
    get
    | the postback values to get reset up after postback (there are other
    controls
    | on the page that intiate a postback that doesn't effect this control, but
    | this control still needs to keep its state)
    |
    | using System;
    | using System.Collections;
    | using System.Collections.Specialized;
    | using System.Web;
    | using System.Web.UI;
    | using System.Web.UI.WebControls;
    | using System.Text;
    | using TEA.CIS.BusinessObjects;
    |
    | using TEA.Teams.Reporting;
    | using TEA.Teams.Reporting.WebControls;
    | namespace TEA.CIS.Web
    | {
    | /// <summary>
    | /// Summary description for GradeLevel.
    | /// </summary>
    | public class GradeLevel : ListBox, INamingContainer
    | {
    | private DropDownList ddlGradeLevel = new DropDownList();
    |
    | public GradeLevel()
    | {
    | }
    |
    | protected override void OnInit(EventArgs e)
    | {
    | base.OnInit (e);
    |
    | // Load in onInit so that its state can be reset after this event
    (before
    | page_Load)
    | CodeCache.PopulateListWithCodes(this, CodeCacheTable.GradeLevelCodes);
    | this.Items.Insert(0, new ListItem("ALL", string.Empty));
    | this.SelectedIndex = 0;
    |
    | foreach(ListItem item in this.Items)
    | ddlGradeLevel.Items.Add(item);
    |
    | ddlGradeLevel.SelectedIndex = 0;
    |
    | // ViewState["ddl"] = ddlGradeLevel.Items;
    | }
    |
    |
    | /// <summary>
    | /// Overide Render Control to display listbox or dropdownlist.
    | /// </summary>
    | /// <param name="writer"></param>
    | protected override void Render(HtmlTextWriter writer)
    | {
    | writer.Write("<table cellspacing=\"0\" cellpadding=\"2\"
    width=\"100%\">");
    | writer.Write("<tr><td class=\"reportCriteria\" align=right>Grade
    | Level:</td><td width=\"100%\" class=\"reportCriteria\">");
    |
    | if (this.SelectionMode == ListSelectionMode.Multiple)
    | {
    | base.Render (writer);
    | }
    | else
    | {
    | ddlGradeLevel.RenderControl(writer);
    | }
    |
    | writer.Write("</td></tr></table>");
    | }
    | }
    | }
    |
    |
    |
    | "Steven Cheng[MSFT]" wrote:
    |
    | > You're welcome TS.
    | >
    | > Glad that you've overcome the problem.
    | >
    | > Regards,
    | >
    | > Steven Cheng
    | > Microsoft Online Support
    | >
    | > Get Secure! www.microsoft.com/security
    | > (This posting is provided "AS IS", with no warranties, and confers no
    | > rights.)
    | > --------------------
    | > | From: "TS" <>
    | > | References: <>
    | > <>
    | > <2rQIZ7$>
    | > <>
    | > <unRs#>
    | > <>
    | > <#>
    | > <$>
    | > <#>
    | > <>
    | > | Subject: Re: explanation of when need to repopulate control
    | > | Date: Mon, 8 Aug 2005 12:50:32 -0500
    | > | Lines: 1445
    | > | X-Priority: 3
    | > | X-MSMail-Priority: Normal
    | > | X-Newsreader: Microsoft Outlook Express 6.00.2800.1158
    | > | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
    | > | Message-ID: <>
    | > | Newsgroups: microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | > | NNTP-Posting-Host: 103nat100.tea.state.tx.us 198.214.103.100
    | > | Path: TK2MSFTNGXA01.phx.gbl!TK2MSFTNGP08.phx.gbl!TK2MSFTNGP10.phx.gbl
    | > | Xref: TK2MSFTNGXA01.phx.gbl
    | > microsoft.public.dotnet.framework.aspnet.buildingcontrols:4014
    | > | X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | > |
    | > | Well you were right that it had something to do with the custom
    control.
    | > The
    | > | datalist was trying to load itself during page load. i put the code
    in
    | > Init,
    | > | and it worked.
    | > |
    | > | thanks steven
    | > |
    | > | | > | > Thanks for your followup TS.
    | > | >
    | > | > So can I say that currently your custom webcontrol(not template list
    | > | > control) can correctly be added both statically and dynamically in
    the
    | > | > normal DataList or Repeater controls (asp.net buildin ) , but have
    some
    | > | > problem for postback events when added in your custom list control?
    | > | >
    | > | > If so, we should keep focus on the custom datalist control. Has it
    any
    | > | > problems when we nest some asp.net buildin controls in it? Would
    you try
    | > | > making a simplified version of your custom datalist control so that
    we
    | > can
    | > | > have a view to see whether there is anything wrong in it. Also,
    it'll be
    | > | > helpful you also provide the complete code that you dynamically add
    | > | control
    | > | > into the datalist (through reflection).
    | > | >
    | > | > Thanks,
    | > | >
    | > | > Steven Cheng
    | > | > Microsoft Online Support
    | > | >
    | > | > Get Secure! www.microsoft.com/security
    | > | > (This posting is provided "AS IS", with no warranties, and confers
    no
    | > | > rights.)
    | > | >
    | > | > --------------------
    | > | > | From: "TS" <>
    | > | > | References: <>
    | > | > <>
    | > | > <2rQIZ7$>
    | > | > <>
    | > | > <unRs#>
    | > | > <>
    | > | > <#>
    | > | > <$>
    | > | > | Subject: Re: explanation of when need to repopulate control
    | > | > | Date: Fri, 5 Aug 2005 17:19:23 -0500
    | > | > | Lines: 1298
    | > | > | X-Priority: 3
    | > | > | X-MSMail-Priority: Normal
    | > | > | X-Newsreader: Microsoft Outlook Express 6.00.2800.1158
    | > | > | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
    | > | > | Message-ID: <#>
    | > | > | Newsgroups:
    microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | > | > | NNTP-Posting-Host: 103nat100.tea.state.tx.us 198.214.103.100
    | > | > | Path:
    TK2MSFTNGXA01.phx.gbl!TK2MSFTNGP08.phx.gbl!TK2MSFTNGP15.phx.gbl
    | > | > | Xref: TK2MSFTNGXA01.phx.gbl
    | > | > microsoft.public.dotnet.framework.aspnet.buildingcontrols:4003
    | > | > | X-Tomcat-NG:
    microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | > | > |
    | > | > | I have a new problem now. I have figured out that the cause is
    the
    | > same
    | > | > | reason. If its in the custom DataList, it doesn't work, else it
    does
    | > | work.
    | > | > |
    | > | > | The scenario:
    | > | > | After the initial page load, you enter data into controls and hit
    | > submit
    | > | > | button, the process is as follows:
    | > | > | Page_Load
    | > | > | DataList's OnLoad
    | > | > | Composite Control's OnLoad
    | > | > | Submit button's OnClick - At this point, the controls in the
    composite
    | > | > | control have no listitems and no selectedValue properties.
    | > | > |
    | > | > | I have statically added the composite control onto the same page
    as
    | > the
    | > | > | dynamic one, so here is the process in this scenario:
    | > | > | Page_Load
    | > | > | Composite Control's OnLoad (The one whose parent is Page)
    | > | > | DataList's OnLoad
    | > | > | Composite Control's OnLoad (The one whose parent is the Custom
    | > DataList)
    | > | > | Submit button's OnClick - At this point, the controls in the
    | > statically
    | > | > | declared composite control have listitems and have values for
    | > | > selectedValue
    | > | > | properties.
    | > | > |
    | > | > | So the same control at the same time - the one outside the custom
    | > | Datalist
    | > | > | has its controls' state set up correctly, the ones inside does
    not.
    | > | > |
    | > | > | So the same reason is at play here. Maybe since i am dynamically
    | > | creating
    | > | > | the class using reflection (Assembly.CreateInstance()) that has
    | > | something
    | > | > to
    | > | > | do with it?
    | > | > |
    | > | > | Please help mr. Cheng.
    | > | > |
    | > | > | Thank you very much!
    | > | > |
    | > | > | TS
    | > | > |
    | > | > |
    | > | > |
    message
    | > | > | | > | > | > Hi TS,
    | > | > | >
    | > | > | > First, I'm glad that you've got your composite control work,
    all the
    | > | > | > dropdownlist's postback events can fire correctly,yes?
    | > | > | >
    | > | > | > As for the new problem you encountered when adding your
    composite
    | > | > control
    | > | > | > into DataList's item, is the DataList the asp.net's buildin
    DataList
    | > | > | > control? And since you mentioned that you dynamically add your
    | > | control
    | > | > | > into it, how do you dynamically add your custom control? Will
    there
    | > | > occur
    | > | > | > problem if you statically add your control into DataList?
    | > | > | >
    | > | > | > Thanks,
    | > | > | >
    | > | > | > Steven Cheng
    | > | > | > Microsoft Online Support
    | > | > | >
    | > | > | > Get Secure! www.microsoft.com/security
    | > | > | > (This posting is provided "AS IS", with no warranties, and
    confers
    | > no
    | > | > | > rights.)
    | > | > | >
    | > | > | > --------------------
    | > | > | > | From: "TS" <>
    | > | > | > | References: <>
    | > | > | > <>
    | > | > | > <2rQIZ7$>
    | > | > | > <>
    | > | > | > <unRs#>
    | > | > | > <>
    | > | > | > | Subject: Re: explanation of when need to repopulate control
    | > | > | > | Date: Wed, 3 Aug 2005 19:07:16 -0500
    | > | > | > | Lines: 1153
    | > | > | > | X-Priority: 3
    | > | > | > | X-MSMail-Priority: Normal
    | > | > | > | X-Newsreader: Microsoft Outlook Express 6.00.2800.1158
    | > | > | > | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
    | > | > | > | Message-ID: <#>
    | > | > | > | Newsgroups:
    | > | microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | > | > | > | NNTP-Posting-Host: 103nat100.tea.state.tx.us 198.214.103.100
    | > | > | > | Path:
    | > | TK2MSFTNGXA01.phx.gbl!TK2MSFTNGP08.phx.gbl!TK2MSFTNGP14.phx.gbl
    | > | > | > | Xref: TK2MSFTNGXA01.phx.gbl
    | > | > | > microsoft.public.dotnet.framework.aspnet.buildingcontrols:3989
    | > | > | > | X-Tomcat-NG:
    | > | microsoft.public.dotnet.framework.aspnet.buildingcontrols
    | > | > | > |
    | > | > | > | Well Steve, I am almost done. My control works well, except
    its
    | > not
    | > | in
    | > | > | the
    | > | > | > | framework i just mentioned. Adding my control dynamically to
    the
    | > | > | > datalist's
    | > | > | > | item may be the root of the cause. i've made sure all custom
    | > | controls
    | > | > | > | implmenet INamingContainer & I think all controls have their
    id's
    | > | set,
    | > | > | so
    | > | > | > | what else can i do?
    | > | > | > |
    | > | > | > | thanks a bunch
    | > | > | > |
    | > | > | > | | > | > | > | > I have figured the cause of the problem, sort of. My main
    | > control
    | > | > was
    | > | > | > | being
    | > | > | > | > loaded dynamically during a custom data list control's
    | > | ItemDataBound
    | > | > | > | event,
    | > | > | > | > and then added to the e.item.controls collection. Once I
    removed
    | > | it
    | > | > | from
    | > | > | > | > here, the correct event was called in my control. the
    problem
    | > is i
    | > | > | need
    | > | > | > to
    | > | > | > | > keep it where it is because of the way the page works.
    | > | > | > | >
    | > | > | > | > I tried to add INamingContainer to the custom Datalist, but
    that
    | > | > | didn't
    | > | > | > | > help. Any ideas what could make this happen?
    | > | > | > | >
    | > | > | > | > thanks so much, i know i'm being a pain, but i'm stuck!
    | > | > | > | >
    | > | > | > | > This is the custom DataLists' event:
    | > | > | > | > protected override void
    OnItemDataBound(DataListItemEventArgs e)
    | > | > | > | >
    | > | > | > | > {
    | > | > | > | >
    | > | > | > | > base.OnItemDataBound(e);
    | > | > | > | >
    | > | > | > | > Parameter parameter = (Parameter)e.Item.DataItem;
    | > | > | > | >
    | > | > | > | > try
    | > | > | > | >
    | > | > | > | > {
    | > | > | > | >
    | > | > | > | > Control control;
    | > | > | > | >
    | > | > | > | > if(parameter.Type == ParameterType.Control)
    | > | > | > | >
    | > | > | > | > control = this.Page.LoadControl(parameter.ControlPath);
    | > | > | > | >
    | > | > | > | > else
    | > | > | > | >
    | > | > | > | > {
    | > | > | > | >
    | > | > | > | > Assembly assembly = parameter.Assembly;
    | > | > | > | >
    | > | > | > | > if(assembly == null)
    | > | > | > | >
    | > | > | > | > {
    | > | > | > | >
    | > | > | > | > // The control didn't declare its own assembly, so use the
    | > | report's
    | > | > | > | > ControlsAssembly
    | > | > | > | >
    | > | > | > | > assembly = this.ControlsAssembly;
    | > | > | > | >
    | > | > | > | > // Ther report's ControlsAssembly is null, so use current
    page's
    | > | > | > assembly
    | > | > | > | >
    | > | > | > | > if(assembly == null)
    | > | > | > | >
    | > | > | > | > assembly = this.Page.GetType().BaseType.Assembly;
    | > | > | > | >
    | > | > | > | > }
    | > | > | > | >
    | > | > | > | >
    | > | > | > | > control = (Control)
    | > | > | assembly.CreateInstance(parameter.ControlTypeName);
    | > | > | > | >
    | > | > | > | > }
    | > | > | > | >
    | > | > | > | > control.ID = parameter.Name;
    | > | > | > | >
    | > | > | > | > // Set up all the properties of this control from the
    | > | > | > parameter.properties
    | > | > | > | >
    | > | > | > | > foreach(DictionaryEntry de in parameter.Properties)
    | > | > | > | >
    | > | > | > | > SetProperty(de.Key.ToString(), de.Value.ToString(),
    control);
    | > | > | > | >
    | > | > | > | >
    | > | > | > | > e.Item.Controls.Add(control);
    | > | > | > | >
    |
     
    Steven Cheng[MSFT], Aug 24, 2005
    #29
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.