isPostBack not working correctly

In the following code,  i generate dropdownlists dynamically  and then  try to add the selected list values to an arraylist and display them on a button(submit) click event.

I have a  if(page.isPostBack == false)  check inside the page_load event  that checks if the page is being loaded for the first time and if it is it generates the lists dynamically and fills option values from database tables(through tableadapter methods).

Otherwise, if the button(submit) was clicked(that is if this was a postback), the selected values from the list should get added to the arraylist and then be displayed.

But this is not happening. Instead it shows some == output and no arraylist values display.

When i tried it without ispostback, it works fine(that is arraylist values get displayed) but then the  form (dropdownlists  themselves with  all option values)  are also displayed along with the  output(arraylist values).

How to correct this behaviour so that it just displays the selected list values and not the form itself along with it?


Code Follows :


using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using QuesDSTableAdapters;
using AnsDSTableAdapters;
using System;
using System.Collections;



public partial class _Default : System.Web.UI.Page
{
    int i = 1;

    //int j;

    //ArrayList alist = new ArrayList();








    protected void Page_Load(object sender, EventArgs e)
    {


        if (Page.IsPostBack == false)
        {

            /* for (j = 0; j<= 1; j++)
             {


                 Response.Write(al[j].ToString());
             }

         }

         else
         {
         */

            QuesDSTableAdapters.QuestionTableAdapter questionsAdapter = new
     QuesDSTableAdapters.QuestionTableAdapter();
            QuesDS.QuestionDataTable questions;

            questions = questionsAdapter.GetQuestions();



            AnsDSTableAdapters.QueAnsTableAdapter queansAdapter = new
     AnsDSTableAdapters.QueAnsTableAdapter();

            AnsDS.QueAnsDataTable answer;



            // AnsDS.QueAnsDataTable queans;






            foreach (QuesDS.QuestionRow quesRow in questions)
            {


                //Response.Write("Question: " + quesRow.Que + "<br />");



                //answer = queansAdapter.GetAnswersByQuestionId(quesRow.QID);

                Form.Controls.Add(new LiteralControl(quesRow.Que));

                answer = queansAdapter.GetAnswersByQuestionId(quesRow.QID);

                DropDownList ddl = new DropDownList();

                ddl.ID = "ddl" + Convert.ToString(i);
                Form.Controls.Add(new LiteralControl("<br>"));

                i += 1;
                Form.Controls.Add(ddl);

                // ddl.DataSource = queansAdapter.GetAnswersByQuestionId(Convert.ToInt32(quesRow.QID));

                ddl.DataSource = answer;

                // DropDownList1.Items.Add(Convert.ToString(answer.Columns ["Answer"]));
                ddl.DataTextField = "Answer";
                ddl.DataBind();

                Form.Controls.Add(new LiteralControl("<br>"));

                Form.Controls.Add(new LiteralControl("<br>"));







            }


            Button btnSubmitResults = new Button();
            btnSubmitResults.ID = "btnSubmitResults";
            btnSubmitResults.Text = "Submit Results";
            btnSubmitResults.Click += SubmitResults;
            Form.Controls.Add(btnSubmitResults);


        }


    }










    protected void SubmitResults(object sender, EventArgs e)
    {
        ArrayList alist = new ArrayList();

        int j;


            foreach (Control ctl in form1.Controls)
            {
                if ((ctl) is DropDownList)
                {
                    alist.Add(((DropDownList)ctl).SelectedValue.ToString());


                }

            }

            for (j = 0; j <= 2; j++)
            {


                Response.Write(alist[j].ToString());
            }


        }
    }
ee-itproAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Joep_KillaarsCommented:
Look at the attached code snippet.

You should use the page_init event to create the control. Save the control as a private member of your page and you can do whatever you want with it, even after postbacks. In this case, set visible to false or simply remove the object from the control collection of the form.
private DropDownList _ddl;
 
        protected void Page_Init()
        {
            _ddl = new DropDownList();
            _ddl.ID = "DropDownListId1";
 
            this.Form.Controls.Add(_ddl);
 
            if (!IsPostBack)
            {
                _ddl.Items.Add("A");
                _ddl.Items.Add("B");
                _ddl.Items.Add("C");
            }
            else
            {
                foreach (Control ctrl in this.Form.Controls)
                    if (ctrl.ID == "DropDownListId1")
                    {
                        _ddl = (DropDownList)ctrl;
                        break;
                    }
            }
 
        }
 
        protected void Button1_Click(object sender, EventArgs e)
        {
            Response.Write(_ddl.SelectedValue);
 
            _ddl.Visible = false;
        }

Open in new window

0
Joep_KillaarsCommented:
the else clause is not necessary, the correct snippet :
public partial class WebForm1 : System.Web.UI.Page
    {
        private DropDownList _ddl;
 
        protected void Page_Init()
        {
            _ddl = new DropDownList();
            _ddl.ID = "DropDownListId1";
 
            this.Form.Controls.Add(_ddl);
 
            if (!IsPostBack)
            {
                _ddl.Items.Add("A");
                _ddl.Items.Add("B");
                _ddl.Items.Add("C");
            }
        }
 
        protected void Button1_Click(object sender, EventArgs e)
        {
            Response.Write(_ddl.SelectedValue);
 
            _ddl.Visible = false;
        }
    }

Open in new window

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
ee-itproAuthor Commented:
Hi,

  Thanks, that was helpful.  
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
ASP.NET

From novice to tech pro — start learning today.