views:

225

answers:

2

We have a project that needs to gather survey data. On one particular page of the website, there are 21 questions each with a scale of 1-5 where the user selects one radio button for each question in the table.

The survey is being coded in VB.NET. The data submits to an SQL database. All the radio buttons are similarly named, so only the number changes for the question -- thinking this would make it easier on the back end coding. In the code behind I was hoping to do something to the effect:

For i = 1 To 21
    If rbLWHFQ_Q(i)A1.Checked Then
        myCommand.Parameters.AddWithValue("@LWHFQ_Q(i)", rbLWHFQ_Q(i)_A1.Value)
    ElseIf rbLWHFQ_Q(i)_A2.Checked Then
        myCommand.Parameters.AddWithValue("@LWHFQ_Q(i)", rbLWHFQ_Q(i)_A2.Value)
    ElseIf rbLWHFQ_Q(i)_A3.Checked Then
        myCommand.Parameters.AddWithValue("@LWHFQ_Q(i)", rbLWHFQ_Q(i)_A3.Value)
    ElseIf rbLWHFQ_Q(i)_A4.Checked Then
        myCommand.Parameters.AddWithValue("@LWHFQ_Q(i)", rbLWHFQ_Q(i)_A4.Value)
    ElseIf rbLWHFQ_Q(i)_A5.Checked Then
        myCommand.Parameters.AddWithValue("@LWHFQ_Q(i)", rbLWHFQ_Q(i)_A5.Value)
    ElseIf rbLWHFQ_Q(i)_A6.Checked Then
        myCommand.Parameters.AddWithValue("@LWHFQ_Q(i)", rbLWHFQ_Q(i)_A6.Value)
    ElseIf rbLWHFQ_Q(i)_A7.Checked Then
        myCommand.Parameters.AddWithValue("@LWHFQ_Q(i)", rbLWHFQ_Q(i)_A7.Value)
    ElseIf rbLWHFQ_Q(i)_A8.Checked Then
        myCommand.Parameters.AddWithValue("@LWHFQ_Q(i)", rbLWHFQ_Q(i)_A8.Value)
    ElseIf rbLWHFQ_Q(i)_A9.Checked Then
        myCommand.Parameters.AddWithValue("@LWHFQ_Q(i)", rbLWHFQ_Q(i)_A9.Value)
    ElseIf rbLWHFQ_Q(i)_A10.Checked Then
        myCommand.Parameters.AddWithValue("@LWHFQ_Q(i)", rbLWHFQ_Q(i)_A10.Value)
    End If
Next i

My research tells me that it's not possible to do what I am wanting without some special coding. I've seen mention of arrays in relation to these types of questions elsewhere, but I'm not familiar enough with arrays to see how they would work in this case.

Am I just going to have to create 21 sets of If...Else statements? :(

Here's what the HTML looks like for a question, if that matters:

<tr class="statement220">
    <th><label for="rbLWHFQ_Q1_A1">1. Causing swelling in your ankles or legs?</label></th>
    <td title="0" >
        <input id="rbLWHFQ_Q1_A1" name="rbLWHFQ_Q1" type="radio" value="0" runat="server" />
    </td>
    <td title="1" >
        <input id="rbLWHFQ_Q1_A2" name="rbLWHFQ_Q1" type="radio" value="1" runat="server" />
    </td>
    <td title="2" >
        <input id="rbLWHFQ_Q1_A3" name="rbLWHFQ_Q1" type="radio" value="2" runat="server" />
    </td>
    <td title="3" >
        <input id="rbLWHFQ_Q1_A4" name="rbLWHFQ_Q1" type="radio" value="3" runat="server" />
    </td>
    <td title="4" >
        <input id="rbLWHFQ_Q1_A5" name="rbLWHFQ_Q1" type="radio" value="4" runat="server" />
    </td>
    <td title="5" >
        <input id="rbLWHFQ_Q1_A6" name="rbLWHFQ_Q1" type="radio" value="5" runat="server" />
    </td>
</tr>

As an aside, I know about RadioButtonLists, but in this case I'm needing to style the radio buttons in a special way and can't get it to work when ASP renders the list items.

Updated to show I used it in my code I'm not sure how StackOverflow works with regards to showing how something worked for you, but I just wanted to add this in case others come here looking for the answer. Basically, I used the code below:

Dim radioButtons()() As HtmlInputRadioButton = { _
    New HtmlInputRadioButton() {rbLWHFQ_Q1_A1, rbLWHFQ_Q1_A2, rbLWHFQ_Q1_A3, rbLWHFQ_Q1_A4, rbLWHFQ_Q1_A5, rbLWHFQ_Q1_A6}, _
    New HtmlInputRadioButton() {rbLWHFQ_Q2_A1, rbLWHFQ_Q2_A2, rbLWHFQ_Q2_A3, rbLWHFQ_Q2_A4, rbLWHFQ_Q2_A5, rbLWHFQ_Q2_A6}, _
    ...
    }

I created an array with the radio button group names:

Dim radioButtonGroupNames() As String = { _
    "@LWHFQ_Q1", _
    "@LWHFQ_Q2", _
    ...
    }

Then in my For...Loop I used:

For i = 0 To 20
    If radioButtons(i)(0).Checked Then
        myCommand.Parameters.AddWithValue(radioButtonGroupNames(i), radioButtons(i)(0).Value)
    ElseIf radioButtons(i)(1).Checked Then
        myCommand.Parameters.AddWithValue(radioButtonGroupNames(i), radioButtons(i)(1).Value)
    ElseIf radioButtons(i)(2).Checked Then
        myCommand.Parameters.AddWithValue(radioButtonGroupNames(i), radioButtons(i)(2).Value)
    ElseIf radioButtons(i)(3).Checked Then
        myCommand.Parameters.AddWithValue(radioButtonGroupNames(i), radioButtons(i)(3).Value)
    ElseIf radioButtons(i)(4).Checked Then
        myCommand.Parameters.AddWithValue(radioButtonGroupNames(i), radioButtons(i)(4).Value)
    ElseIf radioButtons(i)(5).Checked Then
        myCommand.Parameters.AddWithValue(radioButtonGroupNames(i), radioButtons(i)(5).Value)
    End If
Next i
+1  A: 

You need to make an array of arrays that hold your radiobuttons, like this:

Dim radioButtons()() As HtmlInputRadioButton = { _
    New HtmlInputRadioButton { rbLWHFQ_Q1_A1, rbLWHFQ_Q1_A2, rbLWHFQ_Q1_A3, rbLWHFQ_Q1_A4, rbLWHFQ_Q1_A5 },
    New HtmlInputRadioButton { rbLWHFQ_Q2_A1, rbLWHFQ_Q2_A2, rbLWHFQ_Q2_A3, rbLWHFQ_Q2_A4, rbLWHFQ_Q2_A5 }, _
    ...
}

Note that the arrays are zero-based.

SLaks
Thanks! This is what I needed. For those reading, the line needs to read "Dim radioButtons()() As HtmlInputRadioButton = { _". Just a minor detail.
Richard
+1  A: 

To answer your question directly you could access each radio button control if you know the container control they are nested in using the FindControl method

((RadioButton)MyContainerControl.FindControl("rblWHQ_Q " + i + "_A2")).Checked

However this will require checking all 210 controls to find your 21 answers. A better method would be to loop throught results of the Form collection:

For i As Integer = 1 To 21
 myCommand.Parameters.AddWithValue("@LWHFQ_Qi" + i, Request.Form("rblWHQ_Q" + i.ToString()))
Next

Sorry if there are error is the code above, i am primarily a c# dev.

Andy Rose
Thanks for this input. I'll keep it in mind if I need it for other coding. I'm sure it might come in handy.
Richard