В верхней части моей страницы есть две кнопки «Добавить элемент управления» и «Очистить элементы управления».
При нажатии кнопки «Добавить» запускается функция, которая создает новую панель и новый DropDownList.
Я назначаю DropDownList обработчик событий для SelectedIndexChanged.
Идея состоит в том, что в зависимости от выбора в моем DropDownList я создам еще один элемент управления на этой панели.
Со временем панель будет содержать некоторые поля, которые я могу выдать в качестве параметров для моего запроса.
Я храню панели в списке панелей, которые воссоздаются при каждой обратной передаче.
Проблема, с которой я столкнулся, заключается в том, что я могу добавить панели, удалить панели и удалить все панели из своего списка, но я НЕ МОГУ, кажется, когда-либо получить срабатывание триггера SelectedIndexChanged ... он никогда не назначается или теряется при каждой обратной передаче.
Я исчерпал свой опыт поиска в Google, и я очень разочарован собой. Я открыт для предложений / исправлений.
Спасибо.
List<Panel> persistControls = new List<Panel>();
protected override void OnInit(EventArgs e)
{
if (Session["persistControls"] != null)
{
persistControls = (List<Panel>)Session["persistControls"];
int count = 0;
foreach (Panel dynamicControl in persistControls)
{
AddQuestionTypeDropDownList(count);
dynamicControl.ID = "panel" + count;
Button btnRemove = new Button();
btnRemove.Click += new EventHandler(btnDelete_Click);
btnRemove.Text = "Remove";
btnRemove.CommandArgument = count.ToString();
// Pushing to Placeholder
myPlaceholder.Controls.Add(dynamicControl);
myPlaceholder.Controls.Add(btnRemove);
count++;
}
}
base.OnInit(e);
}
// Calls three functions responsible for pulling from the Database and binding the Datagrid.
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GetClustersFromDatabase(userid);
BindGrid();
BindState();
}
}
private DropDownList AddQuestionTypeDropDownList(int count)
{
DropDownList list = new DropDownList();
list.ID = "list" + count;
list.Items.Add(new ListItem("--Select One--", ""));
list.Items.Add(new ListItem("Title", "1"));
list.Items.Add(new ListItem("Contact", "2"));
list.Items.Add(new ListItem("Date Created", "3"));
list.SelectedIndexChanged += new EventHandler(list_SelectedIndexChanged);
list.AutoPostBack = true;
return list;
}
private DropDownList AddQuestionTypeDropDownList()
{
DropDownList list = new DropDownList();
list.Items.Add(new ListItem("--Select One--", ""));
list.Items.Add(new ListItem("Title", "1"));
list.Items.Add(new ListItem("Contact", "2"));
list.Items.Add(new ListItem("Date Created", "3"));
list.SelectedIndexChanged += new EventHandler(list_SelectedIndexChanged);
list.AutoPostBack = true;
return list;
}
protected void btnAdd_Click(object sender, EventArgs e)
{
try
{
Panel panelContainer = new Panel();
panelContainer.ID = "panel" + persistControls.Count;
panelContainer.Controls.Add(AddQuestionTypeDropDownList());
Button btnRemove = new Button();
btnRemove.Click += new EventHandler(btnDelete_Click);
btnRemove.Text = "Remove";
btnRemove.CommandArgument = persistControls.Count.ToString();
myPlaceholder.Controls.Add(panelContainer); // Pushes the Panel to the page.
persistControls.Add(panelContainer);// Adds our Panel to the Control list
myPlaceholder.Controls.Add(btnRemove); // Pushes our Button to the page.
Session["persistControls"] = persistControls; // put it in the session
}
catch
{
throw;
}
}
private void list_SelectedIndexChanged(object sender, EventArgs e)
{
//I have no code here but thats because I currently can't even get it to fire.
try
{
}
catch
{
throw;
}
}
protected void btnClear_Click(object sender, EventArgs e)
{
try
{
Session["persistControls"] = null;
Response.Redirect(Request.Url.ToString());
}
catch
{
throw;
}
}
protected void btnDelete_Click(object sender, EventArgs e)
{
try
{
int deleteThisOne = int.Parse(((Button)sender).CommandArgument);
persistControls.Remove(persistControls[deleteThisOne]);
Session["persistControls"] = persistControls;
Response.Redirect(Request.Url.ToString());
}
catch
{
throw;
}
}