общее значение всех значений радиобуттониста - PullRequest
0 голосов
/ 11 февраля 2011

У меня есть 20 radiobuttonlists на странице.Каждый имеет 4 варианта со значениями 1, 2, 3 и 4.

Что мне нужно сделать, это при отправке формы, получить общее значение всех radiobuttonlists (например, 3 + 1 + 2 + 3+4 ...), деленное на общее число, которое было фактически заполнено (ни одно из них не является обязательным для заполнения полем, поэтому можно было заполнить что-нибудь от 0 до 20) - следовательно, получилось среднее значение.

Есть ли простой / элегантный способ сделать это?

1 Ответ

1 голос
/ 11 февраля 2011

Я бы вставил RadioButtonLists в Panel или другой Контейнер-элемент управления.Затем вы можете зациклить его контрольную коллекцию, чтобы получить все списки RadioButtonList.

Вы хотите разделить на число RBL или на количество выбранных RBL?

Пример, который делит на RBL-Count, следовательно, считает не выбранный как ноль и округляет до следующего целого числа:

aspx:

   <asp:Panel ID="OptionPanel" runat="server">
        <asp:RadioButtonList ID="RadioButtonList1" runat="server" RepeatDirection="Horizontal">
            <asp:ListItem Text="1" Value="1"></asp:ListItem>
            <asp:ListItem Text="2" Value="2"></asp:ListItem>
            <asp:ListItem Text="3" Value="3"></asp:ListItem>
            <asp:ListItem Text="4" Value="4"></asp:ListItem>
        </asp:RadioButtonList>
        <!-- and so on ... -->
    </asp:Panel>
    <asp:Button ID="BtnCalculate" runat="server" Text="calculate average value" />
    <asp:Label ID="LblResult" runat="server" Text=""></asp:Label>

и в коде:

    Protected Sub BtnCalculate_Click(ByVal sender As Object, ByVal e As EventArgs) Handles BtnCalculate.Click
        Dim rblCount As Int32
        Dim total As Int32
        Dim avg As Int32
        For Each ctrl As UI.Control In Me.OptionPanel.Controls
            If TypeOf ctrl Is RadioButtonList Then
                rblCount += 1
                Dim rbl As RadioButtonList = DirectCast(ctrl, RadioButtonList)
                If rbl.SelectedIndex <> -1 Then
                    Dim value As Int32 = Int32.Parse(rbl.SelectedValue)
                    total += value
                End If
            End If
        Next
        If rblCount <> 0 Then
            avg = Convert.ToInt32(Math.Round(total / rblCount, MidpointRounding.AwayFromZero))
        End If
        Me.LblResult.Text = "Average: " & avg
    End Sub

Согласно новой информации, вам необходимо учитывать только выбранные списки RadioButtonLists и полностью игнорировать fe RadioButtonList14, посмотрите:

If rbl.SelectedIndex <> -1 AndAlso rbl.ID <> "RadioButtonList14" Then
   Dim value As Int32 = Int32.Parse(rbl.SelectedValue)
   total += value
   rblCount += 1 'count only the selected RadiobuttonLists'
End If

Я переместил rblCount += 1 в If rbl.SelectedIndex <> -1 -Statement, кроме того, я добавил rbl.ID <> "RadioButtonList14" в качестве дополнительного ограничения, чтобы игнорировать этот RadioButtonList.

...