Search code examples
c#asp.netsql-serverdata-bindingradiobuttonlist

Displaying text different than DataTextField in a RadioButtonList


I try to develop a web based survey creation and filling app on ASP.NET and C# getting data from Sql Server. I use DataBind to bind my question names and answers. Below in the picture, I need to show only the question number (like 1, 2, 3 etc.) in RadioButtonList (not with the question name) and only the question name in a label lblQuestion as;

protected void rbtnQuestions_SelectedIndexChanged(object sender, EventArgs e)
    {
        General.myquestionid = System.Convert.ToInt32(rbtnQuestions.SelectedValue);

        lblQuestion.Text = rbtnQuestions.SelectedItem.Text;
    }

I also need the "id" of survey_question table to display the answers below the question since I use it in SelectedIndexChanged event.

enter image description here

But since I use DataTextField, both RadioButtonList text and lblQuestion.Text show the same thing. My way of binding the data is below:

string sqlStr = "SELECT id, question_no, question, survey_answer_type_id FROM survey_question WHERE survey_id = '" + General.mysurveyid + "'";
cmd = new SqlCommand(sqlStr, connection);
da.SelectCommand = cmd;
da.Fill(data);

rbtnQuestions.DataSource = data;
rbtnQuestions.DataTextField  = "question";
rbtnQuestions.DataValueField = "id";
rbtnQuestions.DataBind();
cmd.Dispose();

How can I achieve this? Thanks.


Solution

  • On Page load event Set

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            string sqlStr = "SELECT id,question_no, CONVERT(varchar(10),(ROW_NUMBER()  over (order by question desc))) AS QueNo,question, survey_answer_type_id FROM survey_question WHERE survey_id = '" + General.mysurveyid + "'";
            cmd = new SqlCommand(sqlStr, connection);
            da.SelectCommand = cmd;
            da.Fill(data);
    
            ViewState["data"] = data;
            rbtnQuestions.DataSource = data;
            rbtnQuestions.DataTextField = "QueNo";
            rbtnQuestions.DataValueField = "id";
            rbtnQuestions.DataBind();
            cmd.Dispose();
        }
    }
    

    And Question Set On SelectedIndexChanged Event

    protected void rbtnQuestions_SelectedIndexChanged(object sender, EventArgs e)
    {
        DataSet ds = (DataSet)ViewState["data"];
    
        DataRow[] row = ds.Tables[0].Select("id = '" + rbtnQuestions.SelectedValue + "'");
        lblQuestion.Text = row[0]["question"].ToString();        
    }