repost: custom control client values gone with postback -- no solution found...

P

Pipo

Nobody knows how to get the values provided in the client can be read in the
user-control?
If have made a Web Custom Control with 2 textboxes and 1 dropdownlist.
The user fills in my control (the textboxes and the dropdownlist) and lots
more stuff on the page.
When the user wants to save the page he'll click the save button.
The server gets the postback but I can read out the filled in controls (in
my control).
The textboxes text = "" and the dropdown.selectedindex = -1.
What do I forget/do wrong....many thanks in advance!!!
VS2005 Beta:

//Class wich containts the user controls:

using System;
using System.Collections.Generic;

using System.ComponentModel;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Drawing;

namespace cusControls

{

[ToolboxBitmap(typeof(TextBox))]

[DefaultProperty("Text")]

[ToolboxData("<{0}:TextBox runat=server></{0}:TextBox>")]

public class Textbox : TextBox

{

public enum TextBoxStyle

{

Text = 0,

Numeric = 1

}



[Bindable(true)]

[Category("Behavior")]

public TextBoxStyle StyleMode

{

get

{

if (ViewState["cusMode"] == null)

return TextBoxStyle.Text;

else

return (TextBoxStyle)ViewState["cusMode"];

}

set

{

ViewState["cusMode"] = value;

}

}

protected override void OnPreRender(EventArgs e)

{

if (StyleMode == TextBoxStyle.Numeric)

{

if (!this.Page.ClientScript.IsClientScriptBlockRegistered(

"ValidateNumericScript"))

this.Page.ClientScript.RegisterClientScriptBlock(typeof(string),

"ValidateNumericScript",

"<script language=javascript>" +

"function ValidateNumeric(){" +

"var keyCode = window.event.keyCode;" +

"if (keyCode > 57 || keyCode < 48)" +

"window.event.returnValue = false;}" +

"</script>");

Attributes.Add("onKeyPress", "ValidateNumeric()");

}

base.OnPreRender(e);

}

public override string Text

{

get { return (base.Text); }

set

{

if (StyleMode == TextBoxStyle.Numeric)

{

try

{

base.Text = Convert.ToInt32(value).ToString();

}

catch { };

}

else

{

base.Text = value;

}

}

}

}

[Designer(typeof(DatePickerDesigner))]

[ToolboxBitmap(typeof(Calendar))]

[ToolboxData("<{0}:DatePicker runat=server></{0}:DatePicker>")]

public class DatePicker : WebControl

{

public enum FormatStyle

{

DMY = 0,

YMD = 1,

MDY = 2

}

[Bindable(true)]

[Category("Appearance")]

public FormatStyle Format

{

get

{

if (ViewState["cusFormat"] == null)

return FormatStyle.DMY;

else

return (FormatStyle)ViewState["cusFormat"];

}

set

{

ViewState["cusFormat"] = value;

}

}

public string SelectedDate

{

get

{

// How to retrieve the values of the Textboxes txtDay and txtYear and the
selected index of the dropdowlist ddlMonth?

//Controls[x] will get an nullreference....Controls.Count gives 0 controls
back after postback.

}

set

{

//Not really needed cos the client provides these values(???)

}

}



protected override void CreateChildControls()

{

Textbox txtDay = new Textbox();

DropDownList ddlMonths = new DropDownList();

Textbox txtYear = new Textbox();

txtDay.StyleMode = Textbox.TextBoxStyle.Numeric;

txtDay.MaxLength = 2;

txtDay.Width = 15;

ddlMonths.Items.Add("January");

ddlMonths.Items.Add("February");

ddlMonths.Items.Add("March");

ddlMonths.Items.Add("April");

ddlMonths.Items.Add("May");

ddlMonths.Items.Add("Jun");

ddlMonths.Items.Add("July");

ddlMonths.Items.Add("August");

ddlMonths.Items.Add("September");

ddlMonths.Items.Add("October");

ddlMonths.Items.Add("November");

ddlMonths.Items.Add("December");

ddlMonths.SelectedIndex = (DateTime.Now.Month) - 1;

txtYear.StyleMode = Textbox.TextBoxStyle.Numeric;

txtYear.Width = 30;

switch (Format)

{

case FormatStyle.MDY:

Controls.Add(ddlMonths);

Controls.Add(txtDay);

Controls.Add(txtYear);

break;

case FormatStyle.YMD:

Controls.Add(txtYear);

Controls.Add(ddlMonths);

Controls.Add(txtDay);

break;

default:

case FormatStyle.DMY:

Controls.Add(txtDay);

Controls.Add(ddlMonths);

Controls.Add(txtYear);

break;

}

}

}

}

//Second class the designer:

using System;

using System.IO;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.Design;

namespace cusControls

{

public class DatePickerDesigner : System.Web.UI.Design.ControlDesigner

{

public override string GetDesignTimeHtml()

{

try

{

DatePicker ctl = (DatePicker)Component;

StringWriter sw = new StringWriter();

HtmlTextWriter tw = new HtmlTextWriter(sw);

TextBox txtDay = new TextBox();

txtDay.Width = 15;

DropDownList ddl = new DropDownList();

ddl.Items.Add("January");

ddl.Width = ctl.Width;

TextBox txtYear = new TextBox();

txtYear.Width = 30;

switch (ctl.Format)

{

case DatePicker.FormatStyle.MDY:

ddl.RenderControl(tw);

txtDay.RenderControl(tw);

txtYear.RenderControl(tw);

break;

case DatePicker.FormatStyle.YMD:

txtYear.RenderControl(tw);

txtDay.RenderControl(tw);

ddl.RenderControl(tw);

break;

default:

case DatePicker.FormatStyle.DMY:

txtDay.RenderControl(tw);

ddl.RenderControl(tw);

txtYear.RenderControl(tw);

break;

}

return sw.ToString();

}

catch (Exception ex)

{

return ex.Message;

}

}

}

}
 
P

Pipo

I have found it myself.....
Problem solved.

Pipo said:
Nobody knows how to get the values provided in the client can be read in
the user-control?
If have made a Web Custom Control with 2 textboxes and 1 dropdownlist.
The user fills in my control (the textboxes and the dropdownlist) and lots
more stuff on the page.
When the user wants to save the page he'll click the save button.
The server gets the postback but I can read out the filled in controls (in
my control).
The textboxes text = "" and the dropdown.selectedindex = -1.
What do I forget/do wrong....many thanks in advance!!!
VS2005 Beta:

//Class wich containts the user controls:

using System;
using System.Collections.Generic;

using System.ComponentModel;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Drawing;

namespace cusControls

{

[ToolboxBitmap(typeof(TextBox))]

[DefaultProperty("Text")]

[ToolboxData("<{0}:TextBox runat=server></{0}:TextBox>")]

public class Textbox : TextBox

{

public enum TextBoxStyle

{

Text = 0,

Numeric = 1

}



[Bindable(true)]

[Category("Behavior")]

public TextBoxStyle StyleMode

{

get

{

if (ViewState["cusMode"] == null)

return TextBoxStyle.Text;

else

return (TextBoxStyle)ViewState["cusMode"];

}

set

{

ViewState["cusMode"] = value;

}

}

protected override void OnPreRender(EventArgs e)

{

if (StyleMode == TextBoxStyle.Numeric)

{

if (!this.Page.ClientScript.IsClientScriptBlockRegistered(

"ValidateNumericScript"))

this.Page.ClientScript.RegisterClientScriptBlock(typeof(string),

"ValidateNumericScript",

"<script language=javascript>" +

"function ValidateNumeric(){" +

"var keyCode = window.event.keyCode;" +

"if (keyCode > 57 || keyCode < 48)" +

"window.event.returnValue = false;}" +

"</script>");

Attributes.Add("onKeyPress", "ValidateNumeric()");

}

base.OnPreRender(e);

}

public override string Text

{

get { return (base.Text); }

set

{

if (StyleMode == TextBoxStyle.Numeric)

{

try

{

base.Text = Convert.ToInt32(value).ToString();

}

catch { };

}

else

{

base.Text = value;

}

}

}

}

[Designer(typeof(DatePickerDesigner))]

[ToolboxBitmap(typeof(Calendar))]

[ToolboxData("<{0}:DatePicker runat=server></{0}:DatePicker>")]

public class DatePicker : WebControl

{

public enum FormatStyle

{

DMY = 0,

YMD = 1,

MDY = 2

}

[Bindable(true)]

[Category("Appearance")]

public FormatStyle Format

{

get

{

if (ViewState["cusFormat"] == null)

return FormatStyle.DMY;

else

return (FormatStyle)ViewState["cusFormat"];

}

set

{

ViewState["cusFormat"] = value;

}

}

public string SelectedDate

{

get

{

// How to retrieve the values of the Textboxes txtDay and txtYear and the
selected index of the dropdowlist ddlMonth?

//Controls[x] will get an nullreference....Controls.Count gives 0 controls
back after postback.

}

set

{

//Not really needed cos the client provides these values(???)

}

}



protected override void CreateChildControls()

{

Textbox txtDay = new Textbox();

DropDownList ddlMonths = new DropDownList();

Textbox txtYear = new Textbox();

txtDay.StyleMode = Textbox.TextBoxStyle.Numeric;

txtDay.MaxLength = 2;

txtDay.Width = 15;

ddlMonths.Items.Add("January");

ddlMonths.Items.Add("February");

ddlMonths.Items.Add("March");

ddlMonths.Items.Add("April");

ddlMonths.Items.Add("May");

ddlMonths.Items.Add("Jun");

ddlMonths.Items.Add("July");

ddlMonths.Items.Add("August");

ddlMonths.Items.Add("September");

ddlMonths.Items.Add("October");

ddlMonths.Items.Add("November");

ddlMonths.Items.Add("December");

ddlMonths.SelectedIndex = (DateTime.Now.Month) - 1;

txtYear.StyleMode = Textbox.TextBoxStyle.Numeric;

txtYear.Width = 30;

switch (Format)

{

case FormatStyle.MDY:

Controls.Add(ddlMonths);

Controls.Add(txtDay);

Controls.Add(txtYear);

break;

case FormatStyle.YMD:

Controls.Add(txtYear);

Controls.Add(ddlMonths);

Controls.Add(txtDay);

break;

default:

case FormatStyle.DMY:

Controls.Add(txtDay);

Controls.Add(ddlMonths);

Controls.Add(txtYear);

break;

}

}

}

}

//Second class the designer:

using System;

using System.IO;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.Design;

namespace cusControls

{

public class DatePickerDesigner : System.Web.UI.Design.ControlDesigner

{

public override string GetDesignTimeHtml()

{

try

{

DatePicker ctl = (DatePicker)Component;

StringWriter sw = new StringWriter();

HtmlTextWriter tw = new HtmlTextWriter(sw);

TextBox txtDay = new TextBox();

txtDay.Width = 15;

DropDownList ddl = new DropDownList();

ddl.Items.Add("January");

ddl.Width = ctl.Width;

TextBox txtYear = new TextBox();

txtYear.Width = 30;

switch (ctl.Format)

{

case DatePicker.FormatStyle.MDY:

ddl.RenderControl(tw);

txtDay.RenderControl(tw);

txtYear.RenderControl(tw);

break;

case DatePicker.FormatStyle.YMD:

txtYear.RenderControl(tw);

txtDay.RenderControl(tw);

ddl.RenderControl(tw);

break;

default:

case DatePicker.FormatStyle.DMY:

txtDay.RenderControl(tw);

ddl.RenderControl(tw);

txtYear.RenderControl(tw);

break;

}

return sw.ToString();

}

catch (Exception ex)

{

return ex.Message;

}

}

}

}
 

Ask a Question

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

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

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,577
Members
45,054
Latest member
LucyCarper

Latest Threads

Top