如何在Groupbox中检查哪个单选按钮然后将其插入数据库

时间:2016-04-03 23:37:00

标签: vb.net winforms sql-server-2008 radio-button

我想在database中插入两个groupbox的记录。 groupbox1(有男性和女性radio buttons)和groupbox2(有新生和老同学radio buttons

enter image description here

在这种情况下,有四种可能的输入需要检查

  1. 男女学生
  2. 男女学生
  3. 女老学生
  4. 女学生和新生
  5. 通常我会像这样单独检查每个单选按钮

       If rbtMale.Checked And rbtOld.Checked Then
                Dim OldStudent = rbtOld.Text.ToString
                Dim Male = rbtMale.Text.ToString
                Using cmd As New SqlClient.SqlCommand("dbo.uspInsert", cn)
                    cmd.CommandType = CommandType.StoredProcedure
                    cmd.Parameters.Add(New SqlParameter("@StudPic", SqlDbType.Image))
                    If (Not String.IsNullOrEmpty(Me.Name) AndAlso System.IO.File.Exists(a.FileName)) Then
                        cmd.Parameters("@StudPic").Value = System.IO.File.ReadAllBytes(a.FileName)
                        cmd.Parameters.Add("@SurName", SqlDbType.VarChar, 100).Value = txtStudLN.Text
                        cmd.Parameters.Add("@FirstName", SqlDbType.VarChar, 100).Value = txtStudFN.Text
                        cmd.Parameters.Add("@Gender", SqlDbType.VarChar, 100).Value = Male
                        cmd.Parameters.Add("@Status", SqlDbType.VarChar, 100).Value = OldStudent
                        cmd.ExecuteNonQuery()
                        MsgBox("Save Record New record Successfully")
                   End If
                End Using
            End If
    

    但我认为有一种明智的方法可以检查radio button中正在检查哪个groupbox并将其插入database。下面是一些代码,让我了解这一点,但问题是我不知道如何传递groupbox中的值,然后将其插入我的数据库中。任何帮助将非常感谢。感谢

    For Each Ctrl In GroupBox1.Controls
        If Ctrl.checked Then MsgBox(Ctrl.name)
    Next
    

1 个答案:

答案 0 :(得分:2)

你几乎在问题底部的片段中。此函数将groupbox作为参数,并返回已检查的RadioButton

Private Function GetGroupBoxCheckedButton(grpb As GroupBox) as RadioButton
    For Each ctrl As RadioButton In grpb.Controls
        If ctrl.Checked Then Return ctrl
    Next
End Function

您将收到编译器警告,该函数不会在所有代码路径上返回结果,但这与RadioButton无关 - 假设您在组框中有多个单选按钮 - 理论上。

或者你也可以使用它。它不会生成编译器警告,但可读性较差: -

Private Function GetGroupBoxCheckedButton(grpb As GroupBox) As RadioButton
    Dim rButton As RadioButton = grpb.Controls.OfType(Of RadioButton).Where(Function(r) r.Checked = True).FirstOrDefault()
    Return rButton
End Function

要获取文本值,只需使用

之类的内容
Dim value As String  = GetGroupBoxCheckedButton(GroupBox1).Text 

我猜你要做的就是将RadioButton文本添加到数据库中,而不是多次编写上面的代码,你只想做一次。您只需删除IfEnd If语句,并修改您的代码的第一部分即可阅读..

        Dim Status As String= GetGroupBoxCheckedButton(GroupBox1).Text
        Dim Gender As String= GetGroupBoxCheckedButton(GroupBox2).Text

顺便说一句,由于.ToString属性返回字符串并且不需要转换为字符串,因此在这些行的末尾不需要.Text

最后在代码中进一步更改变量以匹配。

        cmd.Parameters.Add("@Gender", SqlDbType.VarChar, 100).Value = Gender
        cmd.Parameters.Add("@Status", SqlDbType.VarChar, 100).Value = Status