Jaimin
Jaimin

Reputation: 9

Loading data dynamically into the Repeater from code behind file

The question may be a bit long :

I am making an Online Evaluation Portal and there different type of questions in database which needs to be loaded in the web- form. The questions can be Single Answer(radio button) or multi-answer(check box button). So depending upon the type I create the radio button or check box as per requirement and load it in the Repeater during Runtime. The code is as below :

SqlCommand cmd = new SqlCommand("select * from tbl_QuestionAnswer", con);
SqlDataReader dr = cmd.ExecuteReader();

while (dr.Read())
{
    if ((string)dr["type"] == "SingleAnswer")
    {
        RadioButton rAnswer1 = new RadioButton();
        rAnswer1.ID = "rbl_Answer1";
        rAnswer1.GroupName = "QAnswer1";
        rAnswer1.Text = dr["Answer1"].ToString();
        Panel PAnswer1 = e.Item.FindControl("PAnswer1") as Panel;
        PAnswer1.Controls.Add(rAnswer1);


        RadioButton rAnswer2 = new RadioButton();
        rAnswer2.ID = "rbl_Answer2";
        rAnswer2.GroupName = "QAnswer1";
        rAnswer2.Text = dr["Answer2"].ToString();
        Panel PAnswer2 = e.Item.FindControl("PAnswer2") as Panel;
        PAnswer2.Controls.Add(rAnswer2);


        RadioButton rAnswer3 = new RadioButton();
        rAnswer3.ID = "rbl_Answer3";
        rAnswer3.GroupName = "QAnswer1";
        rAnswer3.Text = dr["Answer3"].ToString();
        Panel PAnswer3 = e.Item.FindControl("PAnswer3") as Panel;
        PAnswer3.Controls.Add(rAnswer3);


        RadioButton rAnswer4 = new RadioButton();
        rAnswer4.ID = "rbl_Answer4";
        rAnswer4.GroupName = "QAnswer1";
        rAnswer4.Text = dr["Answer4"].ToString();
        Panel PAnswer4 = e.Item.FindControl("PAnswer4") as Panel;
        PAnswer4.Controls.Add(rAnswer4);
    }

    else
    {
        CheckBox cAnswer1 = new CheckBox();
        cAnswer1.ID = "chk_Answer1";
        cAnswer1.Text = dr["Answer1"].ToString();
        Panel PAnswer1 = e.Item.FindControl("PAnswer1") as Panel;
        PAnswer1.Controls.Add(cAnswer1);

        CheckBox cAnswer2 = new CheckBox();
        cAnswer2.ID = "chk_Answer2";
        cAnswer2.Text = dr["Answer2"].ToString();
        Panel PAnswer2 = e.Item.FindControl("PAnswer2") as Panel;
        PAnswer2.Controls.Add(cAnswer2);

        CheckBox cAnswer3 = new CheckBox();
        cAnswer3.ID = "chk_Answer3";
        cAnswer3.Text = dr["Answer3"].ToString();
        Panel PAnswer3 = e.Item.FindControl("PAnswer3") as Panel;
        PAnswer3.Controls.Add(cAnswer3);

        CheckBox cAnswer4 = new CheckBox();
        cAnswer4.ID = "chk_Answer4";
        cAnswer4.Text = dr["Answer4"].ToString();
        Panel PAnswer4 = e.Item.FindControl("PAnswer4") as Panel;
        PAnswer4.Controls.Add(cAnswer4);
    }
}

But the problem here is all the answers get loaded in all questions. i.e. from that dr["Answer1"] it takes all the data in the "Answer1" column and then makes a check-box or radio-button. I don't know why that is happening as it should take only onr row at a time and data from that row only.

Also this runs good till 2 questions. After that if I add 3rd question and try to load it, it gives error saying "Multiple controls with the same ID 'rbl_Answer1' were found. FindControl requires that controls have unique IDs.". And this is correct too. So I need a approach to load questions into the web-form dynamically depending on Single answer or multi -asnwer

Upvotes: 1

Views: 143

Answers (1)

User12345
User12345

Reputation: 1582

It's very clear that you may create control with the same id if you have more than one row in your query.

Try to make dynamic field/control and set dynamic ID for those control

while (dr.Read())
{
    if ((string)dr["type"] == "SingleAnswer")
    {
        RadioButton rAnswer1 = new RadioButton();
        rAnswer1.ID = "rbl_Answer" + dr["AnswerID1"].ToString();

or something like that...

Upvotes: 1

Related Questions