Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > ASP .Net > ASP .Net Building Controls > explanation of when need to repopulate control

Reply
Thread Tools

explanation of when need to repopulate control

 
 
TS
Guest
Posts: n/a
 
      08-02-2005
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


 
Reply With Quote
 
 
 
 
TS
Guest
Posts: n/a
 
      08-02-2005
My control's sub control (dropdownlist) doesn't have its items collection
re-populated from viewstate. I also have a textbox that doesn't have its
value persisted either (Well sort of. In the load event, i access the
textbox and its value is blank, but when the control comes back to the user,
the value i entered in that textbox is there!!!???)

sorry for the large amount of code, but here it goes, again.
using System;

using System.Collections.Specialized;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Text;

using Operations.Teams.Business;

using Operations.Teams.Data;

using Operations.Teams.Reporting;

using Operations.Teams.Reporting.WebControls;

namespace Operations.Teams.Web.ReportControls

{

/// <summary>

/// Summary description for FiscalAgentHierarchy.

/// </summary>

public class FiscalAgentHierarchy : Control, 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 OnInit(EventArgs e)

{

EnsureChildControls();

if(this.fasFiscalAgent.SelectedFiscalAgentName != string.Empty)

{

if(!Page.IsPostBack)

{

LoadFundingSource();

LoadProviders();

}

}

base.OnInit (e);

}

protected override void OnLoad(EventArgs e)

{

// The controls should now be in the control tree and its client values
should be in it???

base.OnLoad (e);

}



private void rysReportingYearSelector_ReportingYearChanged(obje ct sender,
EventArgs e)

{

this.SchoolYear = rysReportingYearSelector.SchoolYear;

this.ReportingYearGroupID = rysReportingYearSelector.ReportYearGroupId;

this.LoadFundingSource();

this.LoadProviders();

}

private void fasFiscalAgent_FiscalAgentChanged(object sender, EventArgs e)

{

this.FiscalAgentID = fasFiscalAgent.SelectedFiscalAgentId;

this.LoadFundingSource();

this.LoadProviders();

}

private void ddlProviders_SelectedIndexChanged(object sender, EventArgs e)

{

if(ddlProviders.SelectedValue != string.Empty)

this.ProviderID = Convert.ToInt32(ddlProviders.SelectedValue);

LoadSites();

}

private void ddlSites_SelectedIndexChanged(object sender, EventArgs e)

{

if(ddlSites.SelectedValue != string.Empty)

this.SiteID = Convert.ToInt32(ddlSites.SelectedValue);

LoadClasses();

}

#endregion

TextBox box = new TextBox();

protected override void CreateChildControls()

{

box.ID = "box";

if(!Page.IsPostBack)

box.Text = "hello";

Controls.Add(box);



rysReportingYearSelector = new ReportingYearReportSelector();

fasFiscalAgent = new FiscalAgentReportSelector();

this.ddlFundingSource = new DropDownList();

this.ddlProviders = new DropDownList();

this.ddlSites = new DropDownList();

this.ddlClasses = new DropDownList();

rysReportingYearSelector.ID = ReportingYearSelectorControlId;

fasFiscalAgent.ID = FiscalAgentSelectorControlId;

ddlFundingSource.ID = FundingSourceControlId;

ddlProviders.ID = ProvidersControlId;

ddlSites.ID = SitesControlId;

ddlClasses.ID = ClassesControlId;

// Assign these controls' Page property because when they try to access Page
they get null reference - apparently they aren't in the control tree at that
point

rysReportingYearSelector.Page = this.Page;

fasFiscalAgent.Page = this.Page;


rysReportingYearSelector.ReportingYearChanged += new
EventHandler(rysReportingYearSelector_ReportingYea rChanged);

// fasFiscalAgent.FiscalAgentChanged += new
EventHandler(fasFiscalAgent_FiscalAgentChanged);

ddlProviders.SelectedIndexChanged += new
EventHandler(ddlProviders_SelectedIndexChanged);

ddlSites.SelectedIndexChanged += new
EventHandler(ddlSites_SelectedIndexChanged);

fasFiscalAgent.IsSubmitOnChange = true;

ddlProviders.AutoPostBack = true;

ddlSites.AutoPostBack = true;


this.SchoolYear = rysReportingYearSelector.SchoolYear;

// check if can populate funding sources and providers (because fiscalAgent
has been saved in session)

// if(this.fasFiscalAgent.SelectedFiscalAgentName != string.Empty)

// {

// if(!Page.IsPostBack)

// {

// LoadFundingSource();

// LoadProviders();

// }

// }

// else

// {

// ddlFundingSource.Visible = false;

// ddlProviders.Visible = false;

// }

// Initially set to false until their direct parent's selection has been
made (all other controls will have data on page load)

ddlSites.Visible = false;

ddlClasses.Visible = false;

// start containing table

this.Controls.Add(WebHelper.MakeLiteral("<table cellpadding=0
cellspacing=0><tr><td>"));


this.Controls.Add(WebHelper.MakeLiteral("<table><t r><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><t r><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><t r><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><t r><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><t r><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><t r><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>"));

}

private void LoadFundingSource()

{

int fiscalAgentId = this.fasFiscalAgent.SelectedFiscalAgentId;


if(fiscalAgentId != int.MinValue)

{

this.ddlFundingSource.Visible = 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

{

this.ddlFundingSource.Visible = false;

}

}

private void LoadProviders()

{

ddlProviders.Items.Add(new ListItem("test","2"));

ddlProviders.Items.Add(new ListItem("22","3"));

ddlProviders.SelectedIndex = 0;



int fiscalAgentId = fasFiscalAgent.SelectedFiscalAgentId;

if(fiscalAgentId != int.MinValue)

{

ddlProviders.Visible = true;

// are these dates correct???????????????????????????

ddlProviders.DataSource = FiscalAgentProvider.Find(fiscalAgentId,
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();

this.ddlProviders.Visible = false;

}

LoadSites();

}

private void LoadSites()

{

if(ddlProviders.SelectedValue != string.Empty)

{

// Load the Site search parameters.

SiteFindArgs siteFindArgs=new SiteFindArgs();

siteFindArgs.FiscalAgentId=Convert.ToInt32(fasFisc alAgent.SelectedFiscalAgen
tId);

ddlSites.Visible = 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();

ddlSites.Visible = false;

}

LoadClasses();

}

private void LoadClasses()

{

if(ddlSites.SelectedValue != string.Empty)

{

OperationsClassFindArgs OperationsClassFindArgs = new
OperationsClassFindArgs();

OperationsClassFindArgs.FiscalAgentId =
Convert.ToInt32(fasFiscalAgent.SelectedFiscalAgent Id);

OperationsClassFindArgs.ReportingYearStartDate =
rysReportingYearSelector.ReportingYearStartDate;

OperationsClassFindArgs.ReportingYearEndDate =
rysReportingYearSelector.ReportingYearEndDate;

OperationsClassFindArgs.ProviderName = ddlProviders.SelectedValue;

OperationsClassFindArgs.SiteName = ddlSites.SelectedValue;


ddlClasses.Visible = true;

ddlClasses.DataSource = OperationsClass.Find(OperationsClassFindArgs);

ddlClasses.DataTextField = "Name";

ddlClasses.DataValueField = "ClassId";

ddlClasses.DataBind();

ddlClasses.Items.Insert(0, new ListItem(string.Empty, string.Empty));

}

else

{

ddlClasses.Items.Clear();

ddlClasses.Visible = 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

public int SchoolYear

{

get{ return (int) ViewState["SchoolYear"]; }

set{ ViewState["SchoolYear"] = value; }

}

public int ReportingYearGroupID

{

get{ return (int) ViewState["ReportingYearGroupID"]; }

set{ ViewState["ReportingYearGroupID"] = value; }

}

public int FiscalAgentID

{

get{ return (int) ViewState["FiscalAgentID"]; }

set{ ViewState["FiscalAgentID"] = value; }

}

public int FundingSourceID

{

get{ return (int) ViewState["FundingSourceID"]; }

set{ ViewState["FundingSourceID"] = value; }

}

public int ProviderID

{

get{ return (int) ViewState["ProviderID"]; }

set{ ViewState["ProviderID"] = value; }

}

public int SiteID

{

get{ return (int) ViewState["SiteID"]; }

set{ ViewState["SiteID"] = value; }

}

#endregion

#region Private Member Variables

private ReportingYearReportSelector rysReportingYearSelector;

private FiscalAgentReportSelector fasFiscalAgent;

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

}

}



"TS" <> wrote in message
news:...
> 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
>
>



 
Reply With Quote
 
 
 
 
TS
Guest
Posts: n/a
 
      08-02-2005
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!


"TS" <> wrote in message
news:...
> 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
>
>



 
Reply With Quote
 
Steven Cheng[MSFT]
Guest
Posts: n/a
 
      08-03-2005
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.webcontro ls,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!TK2MSFT NGP10.phx.gbl
| Xref: TK2MSFTNGXA01.phx.gbl
microsoft.public.dotnet.framework.aspnet.buildingc ontrols:3979
microsoft.public.dotnet.framework.aspnet.webcontro ls:10243
| X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.buildingc ontrols
|
| 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!
|
|
| "TS" <> wrote in message
| news:...
| > 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
| >
| >
|
|
|

 
Reply With Quote
 
TS
Guest
Posts: n/a
 
      08-03-2005
Thanks a bunch Steven I have gotten a lot of progress. I can always count on
you. I now have a new problem. The composite controls in my composite
control correctly fires their sub drop down lists which gets handled in my
main composite control. Then I have 4 drop down lists in my composite
control, and none of their selectedIndexChanged events fire.

I'm pretty sure i have all my bases covered and don't know what the problem
could be. Both sub composite controls use INamingContainter and set their
control's Id property.

Any other thoughts?

thanks

My latest code:
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 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;

}

private void rysReportingYearSelector_ReportingYearChanged(obje ct 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()

{

rysReportingYearSelector = new ReportingYearReportSelector();

fasFiscalAgent = new FiscalAgentReportSelector();

this.ddlFundingSource = new DropDownList();

this.ddlProviders = new DropDownList();

this.ddlSites = new DropDownList();

this.ddlClasses = new DropDownList();

rysReportingYearSelector.ID = ReportingYearSelectorControlId;

fasFiscalAgent.ID = FiscalAgentSelectorControlId;

ddlFundingSource.ID = FundingSourceControlId;

ddlProviders.ID = ProvidersControlId;

ddlSites.ID = SitesControlId;

ddlClasses.ID = ClassesControlId;

// Assign these controls' Page property because when they try to access Page
they get null reference - apparently they aren't in the control tree at that
point

rysReportingYearSelector.Page = this.Page;

fasFiscalAgent.Page = this.Page;


rysReportingYearSelector.ReportingYearChanged += new
EventHandler(rysReportingYearSelector_ReportingYea rChanged);

fasFiscalAgent.FiscalAgentChanged += new
EventHandler(fasFiscalAgent_FiscalAgentChanged);

ddlProviders.SelectedIndexChanged += new
EventHandler(ddlProviders_SelectedIndexChanged);

ddlSites.SelectedIndexChanged += new
EventHandler(ddlSites_SelectedIndexChanged);

fasFiscalAgent.IsSubmitOnChange = true;

ddlProviders.AutoPostBack = true;

ddlSites.AutoPostBack = true;


// start containing table

this.Controls.Add(WebHelper.MakeLiteral("<table cellpadding=0
cellspacing=0><tr><td>"));


this.Controls.Add(WebHelper.MakeLiteral("<table><t r><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><t r><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><t r><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><t r><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><t r><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><t r><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>"));

}

private void LoadFundingSource()

{

int fiscalAgentId = 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 = fasFiscalAgent.SelectedFiscalAgentId;

if(fiscalAgentId != int.MinValue)

{

ProviderVisible = true;

// are these dates correct???????????????????????????

ddlProviders.DataSource = FiscalAgentProvider.Find(fiscalAgentId,
rysReportingYearSelector.ReportingYearStartDate,
rysReportingYearSelector.ReportingYearEndDate); //new DateTime(2005,7,1),
new DateTime(2006,6,30));

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;

}

}

private void LoadSites()

{

if(ddlProviders.SelectedValue != string.Empty)

{

// Load the Site search parameters.

SiteFindArgs siteFindArgs=new SiteFindArgs();

siteFindArgs.FiscalAgentId=Convert.ToInt32(fasFisc alAgent.SelectedFiscalAgen
tId);

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;

}

}

private void LoadClasses()

{

if(ddlSites.SelectedValue != string.Empty)

{

AdultEdClassFindArgs adultEdClassFindArgs = new AdultEdClassFindArgs();

adultEdClassFindArgs.FiscalAgentId =
Convert.ToInt32(fasFiscalAgent.SelectedFiscalAgent Id);

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 ReportingYearReportSelector rysReportingYearSelector;

private FiscalAgentReportSelector fasFiscalAgent;

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
news:2rQIZ7$...
> 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.webcontro ls,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!TK2MSFT NGP10.phx.gbl
> | Xref: TK2MSFTNGXA01.phx.gbl
> microsoft.public.dotnet.framework.aspnet.buildingc ontrols:3979
> microsoft.public.dotnet.framework.aspnet.webcontro ls:10243
> | X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.buildingc ontrols
> |
> | 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!
> |
> |
> | "TS" <> wrote in message
> | news:...
> | > 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
> | >
> | >
> |
> |
> |
>



 
Reply With Quote
 
TS
Guest
Posts: n/a
 
      08-03-2005
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(obje ct 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><t r><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><t r><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><t r><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><t r><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><t r><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><t r><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.SelectedFiscalAgent Id);

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.SelectedFiscalAgent Id);

// 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
news:2rQIZ7$...
> 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.webcontro ls,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!TK2MSFT NGP10.phx.gbl
> | Xref: TK2MSFTNGXA01.phx.gbl
> microsoft.public.dotnet.framework.aspnet.buildingc ontrols:3979
> microsoft.public.dotnet.framework.aspnet.webcontro ls:10243
> | X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.buildingc ontrols
> |
> | 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!
> |
> |
> | "TS" <> wrote in message
> | news:...
> | > 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
> | >
> | >
> |
> |
> |
>



 
Reply With Quote
 
TS
Guest
Posts: n/a
 
      08-03-2005
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

"TS" <> wrote in message
news:...
> 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(obje ct 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><t r><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><t r><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><t r><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><t r><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><t r><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><t r><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.SelectedFiscalAgent Id);
>
> 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.SelectedFiscalAgent Id);
>
> // 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
> news:2rQIZ7$...
> > 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.webcontro ls,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!TK2MSFT NGP10.phx.gbl
> > | Xref: TK2MSFTNGXA01.phx.gbl
> > microsoft.public.dotnet.framework.aspnet.buildingc ontrols:3979
> > microsoft.public.dotnet.framework.aspnet.webcontro ls:10243
> > | X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.buildingc ontrols
> > |
> > | 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!
> > |
> > |
> > | "TS" <> wrote in message
> > | news:...
> > | > 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
> > | >
> > | >
> > |
> > |
> > |
> >

>
>



 
Reply With Quote
 
TS
Guest
Posts: n/a
 
      08-03-2005
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);

}

}

"TS" <> wrote in message
news:unRs%...
> 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
>
> "TS" <> wrote in message
> news:...
> > 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(obje ct

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><t r><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><t r><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><t r><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><t r><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><t r><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><t r><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.SelectedFiscalAgent Id);
> >
> > 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.SelectedFiscalAgent Id);
> >
> > // 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
> > news:2rQIZ7$...
> > > 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.webcontro ls,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!TK2MSFT NGP10.phx.gbl
> > > | Xref: TK2MSFTNGXA01.phx.gbl
> > > microsoft.public.dotnet.framework.aspnet.buildingc ontrols:3979
> > > microsoft.public.dotnet.framework.aspnet.webcontro ls:10243
> > > | X-Tomcat-NG:

microsoft.public.dotnet.framework.aspnet.buildingc ontrols
> > > |
> > > | 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!
> > > |
> > > |
> > > | "TS" <> wrote in message
> > > | news:...
> > > | > 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
> > > | >
> > > | >
> > > |
> > > |
> > > |
> > >

> >
> >

>
>



 
Reply With Quote
 
TS
Guest
Posts: n/a
 
      08-04-2005
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

"TS" <> wrote in message
news:...
> 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);
>
> }
>
> }
>
> "TS" <> wrote in message
> news:unRs%...
> > 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
> >
> > "TS" <> wrote in message
> > news:...
> > > 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(obje ct

> 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><t r><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><t r><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><t r><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><t r><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><t r><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><t r><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.SelectedFiscalAgent Id);
> > >
> > > 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.SelectedFiscalAgent Id);
> > >
> > > // 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
> > > news:2rQIZ7$...
> > > > 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.webcontro ls,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!TK2MSFT NGP10.phx.gbl
> > > > | Xref: TK2MSFTNGXA01.phx.gbl
> > > > microsoft.public.dotnet.framework.aspnet.buildingc ontrols:3979
> > > > microsoft.public.dotnet.framework.aspnet.webcontro ls:10243
> > > > | X-Tomcat-NG:

> microsoft.public.dotnet.framework.aspnet.buildingc ontrols
> > > > |
> > > > | 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!
> > > > |
> > > > |
> > > > | "TS" <> wrote in message
> > > > | news:...
> > > > | > 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
> > > > | >
> > > > | >
> > > > |
> > > > |
> > > > |
> > > >
> > >
> > >

> >
> >

>
>



 
Reply With Quote
 
Steven Cheng[MSFT]
Guest
Posts: n/a
 
      08-04-2005
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.buildingc ontrols
| NNTP-Posting-Host: 103nat100.tea.state.tx.us 198.214.103.100
| Path: TK2MSFTNGXA01.phx.gbl!TK2MSFTNGP08.phx.gbl!TK2MSFT NGP14.phx.gbl
| Xref: TK2MSFTNGXA01.phx.gbl
microsoft.public.dotnet.framework.aspnet.buildingc ontrols:3989
| X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.buildingc ontrols
|
| 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
|
| "TS" <> wrote in message
| news:...
| > 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);
| >
| > }
| >
| > }
| >
| > "TS" <> wrote in message
| > news:unRs%...
| > > 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
| > >
| > > "TS" <> wrote in message
| > > news:...
| > > > 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(obje ct
| > 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><t r><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><t r><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><t r><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><t r><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><t r><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><t r><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.SelectedFiscalAgent Id);
| > > >
| > > > 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.SelectedFiscalAgent Id);
| > > >
| > > > // 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
| > > > news:2rQIZ7$...
| > > > > 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.webcontro ls,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!TK2MSFT NGP10.phx.gbl
| > > > > | Xref: TK2MSFTNGXA01.phx.gbl
| > > > > microsoft.public.dotnet.framework.aspnet.buildingc ontrols:3979
| > > > > microsoft.public.dotnet.framework.aspnet.webcontro ls:10243
| > > > > | X-Tomcat-NG:
| > microsoft.public.dotnet.framework.aspnet.buildingc ontrols
| > > > > |
| > > > > | 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!
| > > > > |
| > > > > |
| > > > > | "TS" <> wrote in message
| > > > > | news:...
| > > > > | > 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
| > > > > | >
| > > > > | >
| > > > > |
| > > > > |
| > > > > |
| > > > >
| > > >
| > > >
| > >
| > >
| >
| >
|
|
|

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Can't repopulate DropdownList control during postback? Bill Cohagan ASP .Net Web Controls 2 09-29-2006 05:32 AM
Repopulate TreeView JN ASP .Net 0 01-26-2006 03:39 AM
explanation of when need to repopulate control TS ASP .Net Web Controls 3 08-03-2005 07:44 AM
popup repopulate luna_s ASP .Net 1 03-06-2004 05:47 PM
How to repopulate a dropdown list without posting back? TaeHo Yoo ASP .Net 4 07-23-2003 07:07 AM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57