So I am trying to make a dynamic form builder where people can add a new form and add fields to that form (the add field brings up several textboxes & dropdown options for that new field). Is there any way to append to a placeholder control when clicking 'add new field'? Also, what is the best way to get the values from those dynamically added controls?
A:
A few simple steps... 1) Create a new instance of the control. Populate any desired properties. 2) Add it to the PlaceHolder using the PlaceHolder's .Controls.Add method. 3) Add the control's event handler. By using a delegate, as shown, you can access the control's values.
DropDownList ddl = new DropDownList();
ListItem li0 = new ListItem(string.Empty, "0");
ListItem li1 = new ListItem("Hello", "1");
ListItem li2 = new ListItem("World", "2");
ddl.Items.Add(li0);
ddl.Items.Add(li1);
ddl.Items.Add(li2);
ddl.AutoPostBack = true;
PlaceHolder1.Controls.Add(ddl);
ddl.SelectedIndexChanged += delegate(object snd, EventArgs evt) { DoSomething(ddl.SelectedValue); };
public void DoSomething(string SelectedValue)
{
//Do something spectacular here...
}
Mark Maslar
2010-03-04 21:09:51
A:
This is the other option (appending to a Literal Control). Each time the user clicks a button, a new field is created. I don't know how to add those dynamic fields to the database. Should I do a foreach?
protected void Button1_Click(object sender, EventArgs e)
{
var thisstring = new StringWriter();
var writer = new HtmlTextWriter(thisstring);
var formLabel = new TextBox();
formLabel.Text = idValue.ToString();
writer.Write("Field Label:");
formLabel.RenderControl(writer);
var typeOptions = new DropDownList();
typeOptions.DataSource = getfieldtypes();
typeOptions.DataTextField = "description";
typeOptions.DataValueField = "id";
typeOptions.DataBind();
writer.Write("Field Type:");
typeOptions.RenderControl(writer);
writer.WriteBreak();
Literal1.Text += thisstring;
}
Alex
2010-03-05 15:12:10
Pls consider posting this as a separate question: How to add dynamic fields to a database
Mark Maslar
2010-03-10 13:49:26