Γεια και πάλι,
Το τελικό σχέδιο είναι κάπως έτσι :
Θέλω να προσθέτω άλλο ένα DropDownList σε ένα panel μόνο όταν ο χρήστης πατήσει το κουμπί "Add New" και να προσθέτω έναν event handler CheckedChanged στο control.
Επίσης θέλω να υπάρχει το viewstate απο κάθε dropdownlist που έχω ήδη προσθέσει απο προηγούμενα postback και να τα χρησιμοποιώ όταν πατηθεί το κουμπί "Submit" (ένα άλλο κουμπί).
Κατέληξα σε αυτή τη λύση η οποία δεν με ικανοποιεί όμως :
PageInit
if (Session["countDDL"] == null)
Session["countDDL"] = 0;
Session["countDDL"] = int.Parse(Session["countDDL"].ToString()) + 1;
for (int i = 0; i < int.Parse(Session["countDDL"].ToString()); i++)
{
DropDownList processes = new DropDownList();
ListItem lsi = new ListItem("Choose ");
processes.ID = "processes" + i.ToString();
processes.Width = 150;
processes.Items.Add(lsi);
processes.AutoPostBack = true;
FillList(processes);
processes.SelectedIndexChanged += new EventHandler(processes_SelectedIndexChanged);
pnlProcesses.Controls.Add(processes);
}
Δημιουργώ και γεμίζω τα dropdownlists που υπάρχουν συν ένα. Το Viewstate δουλεύει μια χαρά αν έχουν το ίδιο ID.
PageLoad
Session["buttonAddNewPressed"] = false;
Reset Session key.
protected void AddNewProcess_Click(object sender, ImageClickEventArgs e)
{
Session["buttonAddNewPressed"] = true;
}
protected void Page_PreRender(object sender, EventArgs e)
{
if ((bool)Session["buttonAddNewPressed"] == false)
{
pnlProcesses.Controls.RemoveAt(pnlProcesses.Controls.Count -1);
Session["countDDL"] = int.Parse(Session["countDDL"].ToString()) - 1;
}
}
Αν το κουμπί "Add New" δεν πατηθεί σβήνω το τελευταίο dropdownlist γιατί κάποιο άλλο event έγινε και μειώνω τον μετρητή των dropdownlist κατά ένα.
Η ερώτησή μου είναι :
Υπάρχει καλύτερη λύση;
Μου φαίνεται λίγο περίεργο να δημιουργώ ένα control και μετά να το σβήνω...
Αυτό γίνεται διότι το "Add New" Event γίνεται μεταξύ Page_Load and PreRender αλλά και τα dropdownlist πρέπει να γίνουν μεταξύ αυτών των βημάτων για να γίνουν register οι handlers των dropdownlist.
Ευχαριστώ για το ενδιαφέρον απο όλους,
koraki_g