2011-02-11 11 views
0

私はページに20 radiobuttonlistsを持っています。それぞれ1,2,3,4の値を持つ4つのオプションがあります。すべてのラジオボタンリストの値の合計値

フォームの送信時に、radiobuttonlists(3 + 1 + 2 + 3 + 4など)の合計値を取得する必要があります。 )を実際に記入された合計数で割ったものです(それらのどれも必須フィールドではないので、そのうちの0〜20のいずれかが記入されている可能性があります)。

これを行う簡単でエレガントな方法はありますか?

答えて

1

Panelやその他のコンテナコントロールにRadioButtonListsを埋め込みます。次に、コントロールコレクションをループして、すべてのRadioButtonListsを取得できます。

RBLの数または選択したRBLの数で除算しますか?

次の整数へ従って非ゼロとして選択カウント、RBL-カウントによって除算例、及びラウンド:

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 

私は私がこのRadioButtonListのを無視するrbl.ID <> "RadioButtonList14"として追加の制限を追加したほか、If rbl.SelectedIndex <> -1 -statementにrblCount += 1を移動しています。

+0

私はこの解決策が好きです...平均を取得するときに特定の列を無視することはできますか? – Tom

+0

@Tom:もちろん、「特定の」列を定義してください!あなたは私が合計値をどのように数えるかを見ています。それに応じてカスタマイズするのは簡単です。 Btw、私の答えにコメントするのに10日かかった? ;-) –

+0

カラムでは、ラジオボタンリストを意味しました。ごめんなさい。私は記入されていないものは無視し、例えばradiobuttonlist14を無視する必要があります。 – Tom

関連する問題