2010-01-11 26 views
2

我們有一個需要收集調查數據的項目。在網站的特定頁面上,有21個問題,每個問題的比例爲1-5,用戶在表格中爲每個問題選擇一個單選按鈕。是否有可能在VB中使用for循環計數器來更改每次被引用的變量?

該調查正在VB.NET中進行編碼。數據提交給SQL數據庫。所有單選按鈕的命名都是相似的,因此只有數字會隨着問題而改變 - 認爲這會使後端編碼變得更容易。在後面的代碼我希望做一些事來的效果:

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 

我的研究告訴我,這是不可能做到我沒有一些特殊的編碼想要什麼。我已經在其他地方看到了有關這些類型的問題的數組的提及,但是我對數組並不熟悉,以瞭解它們在這種情況下的工作方式。

我只需要創建21套If ... Else語句? :(

這裏的HTML是什麼樣子的一個問題,如果該事項:

<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> 

順便說一句,我知道RadioButtonLists,但在這種情況下,我需要的樣式單選按鈕一種特殊的方式並不能得到它的工作時,ASP呈現列表項。

更新,以顯示我用它在我的代碼 我不知道StackOverflow上如何與問候顯示的東西是如何工作的你,但我只是想補充一點,以防其他人來這裏尋找答案asically,我用下面的代碼:

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}, _ 
    ... 
    } 

我創建與無線電按鈕組名稱的數組:

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

然後在我對於...循環我使用:

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

您需要製作一個陣列來保存您的單選按鈕,如下所示:

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 }, _ 
    ... 
} 

請注意,數組是從零開始的。

+0

謝謝!這是我需要的。對於那些閱讀,該行需要閱讀「Dim radioButtons()()As HtmlInputRadioButton = {_」。只是一個小細節。 – Richard 2010-01-11 20:54:59

1

要回答你的問題直接,如果你知道他們是嵌套在使用FindControl方法

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

然而這將需要檢查所有210個控制找到你21個回答容器控件,你可以訪問每一個單選按鈕控件。更好的方法是將表格收集的循環throught結果:

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

很抱歉,如果有錯誤是上面的代碼,我是主要是C#開發。

+0

感謝您的輸入。如果我需要其他編碼,我會記住它。我相信它可能派上用場。 – Richard 2010-01-11 21:04:06

相關問題