0

12 個のグループボックスを含むフォームがあり、そのグループボックスにはそれぞれ 3 つのラジオ ボタンがあります。for loopチェックされているラジオボタンを取得し、ラジオボタンの値を取得するために使用します。グループボックスとラジオボタンを通過する文字列変数と整数変数を宣言します。私の問題は、文字列変数と整数変数を連結する方法です。サンプルコード:

 Dim opt, opt1, opt2, opt3, opt4, opt5, opt6, opt7, opt8, opt9, opt10, opt11, opt12 As String
    Dim grpboxcnt As Integer = 1
    Dim rdbtncnt As Integer = 1
    Dim xrdbtn As String

    For Each grpbx As GroupBox In Me.Controls.OfType(Of GroupBox)()

        For Each rdbtn As RadioButton In Me.Controls("GroupBox" & grpboxcnt).Controls.OfType(Of RadioButton)()
            If rdbtn.Checked = True Then
                If rdbtn.Text = "Yes" Then
                    opt & rdbtncnt = 1 '(i want to be like this way but it is an error and it is not the proper way, is there any way to concat string variable to integer variable?) if this is checked i want to concat the string(opt) and integer(rdbtncnt) example opt & rdbtncnt = 1 ;but it gives me error 
                ElseIf rdbtn.Text = "No" Then
                    opt & rdbtncnt = 0 '(i want to be like that but it is an error and it is not the proper way, is there any way to concat string variable to integer variable?) if this is checked then i want to concat the string(opt) and integer(rdbtncnt) example opt & rdbtncnt = 0 ;but it gives me error
                ElseIf rdbtn.Text = "NA" Then
                    opt & rdbtncnt  = 2 '(i want to be like that but it is an error and it is not the proper way, is there any way to concat string variable to integer variable?) if this is checked i want to concat the string(opt) and integer(rdbtncnt) example opt & rdbtncnt = 2 ;but it gives me error
                End If
            End If
            Next
         rdbtncnt += 1 'then rdbtncnt increment new set of radiobuttons will be looped
        grpboxcnt += 1 'then grpboxcnt increment new name of groupbox will be looped
    Next

sqlcommand.commandType = "UPDATE table1 SET radio1 = @opt1, radio2 = @opt2 , radio2 = @opt3 , etc... WHERE tableID = 1"

前もって感謝します!

4

3 に答える 3

2

私はあなたが何をしようとしているのか理解していると思います - あなたがいるものにopt基づいて正しい変数を使用したいようですRadioButton- つまり、 にいる場合はRadioButton1を使用したい 、 にopt1いる場合は を使用しRadioButton2たい使用するopt2など

残念ながら、2 つの異なる変数を連結してその名前を形成することによって変数を参照することはできません。少なくとも、私は認識していません。

これにはいくつかの方法があります。 a を使用してsList(Of Integer)と同じ順序で値を保持するか、 a を使用して名前をキー ("opt" & RadionButton 番号) として保持し、選択した値を保持することができます。RadiButtonDictionary(Of String, Integer)

これを使用してSQLコマンドにパラメーターの値を提供するつもりであるように見えるので、パラメーター名をキーとして渡すことで正しい値を取得できるため、辞書をお勧めします。

Dim radioButtonValues As New Dictionary(Of String, Integer)
Dim grpboxcnt As Integer = 1
Dim rdbtncnt As Integer = 1

For Each grpbx As GroupBox In Me.Controls.OfType(Of GroupBox)()

    For Each rdbtn As RadioButton In Me.Controls("GroupBox" & grpboxcnt).Controls.OfType(Of RadioButton)()
        If rdbtn.Checked = True Then
            If rdbtn.Text = "Yes" Then
                radioButtonValues.Add("@opt" & rdbtncnt.ToString(), 1) 
            ElseIf rdbtn.Text = "No" Then
                radioButtonValues.Add("@opt" & rdbtncnt.ToString(), 0)
            ElseIf rdbtn.Text = "NA" Then
                radioButtonValues.Add("@opt" & rdbtncnt.ToString(), 2)
            End If
        End If
     Next
     rdbtncnt += 1
     grpboxcnt += 1
Next

これにより、最初の のキーとして「@opt1」RadioButtonList、2 番目のキーとして「@opt2」RadioButtonListなどのディクショナリが作成されます。キーに「@」を追加したのは、次のコードでパラメーター名として使用するためです。

' Note that it should be CommandText, not CommandType
sqlcommand.CommandText = "UPDATE table1 SET radio1 = @opt1, radio2 = @opt2 , radio2 = @opt3 , etc... WHERE tableID = 1"
sqlcommand.CommandType = CommandType.Text

For Each key As String in radioButtonValues.Keys

    sqlcommand.Parameters.AddWithValue(key, radioButtonValues(key))
Next

基本的に、ディクショナリ内のキーと値のペアごとに、キーをパラメーター名として追加し、その値をパラメーター値として SQL コマンドのパラメーター コレクションに追加します。

ノート

SQLステートメントに適切な数のパラメーターがあり、それらが正しく命名されていることを確認する必要があるため、これは少し脆弱です。上記のコードを拡張して、ディクショナリのキーに基づいて SQL コマンドを作成し、パラメータを追加することもできますが、ディクショナリを 1 回ではなく 2 回調べることになります (1 回目は SQL を構築するため、2 回目は構築するため)。パラメーター コレクション)。

また、あなたはインクリメントrdbtncntgrpboxcntていて、外側のループにいますが、それがあなたが望むものかどうかはわかりません(RadioButtonそれぞれに1つしかないことがわかっている場合を除きますGroupBox)。

于 2013-08-14T08:16:10.300 に答える
0

あなたが試すことができます:

rdbtncnt2Str = rdbtncnt.ToString()

また

rdbtncnt2Str = Convert.ToString(rdbtncnt)

これにより、整数が文字列に変換され、次を使用して連結できます。

文字列としての薄暗い結果

結果 = オプト & rdbtncnt

于 2013-08-14T03:56:48.833 に答える