我对编程很新!我正在使用Visual Basic Studio 2017来制作Windows窗体
我有一个带有2个单选按钮,6个复选框和1个组合框的表单。我在访问数据库中有数据。关键是当选择其中一个单选按钮时,只有来自数据库的某些数据才会在组合框中填充。
我的数据库有8列,第一列是id列。例如,它有这样的数据。汉堡-FR001。汉堡-GR001。汉堡-GR002。三明治-FR001等。所以单选按钮可以过滤汉堡包或三明治。我在Like
中使用了一个SQL语句If optBurger.Checked = True Then
SQLa = "SELECT FROM Menu WHERE MENU_ID Like '%Burger%'"
例如,如果一个单选按钮显示Burger和另一个三明治,通过选择Burger,组合框只显示与汉堡有关的数据。
复选框充当过滤器,如果我为GR选中一个复选框,它应该只显示带有FR的条目,并且可以选择多个复选框。这可以通过选择数据库中的“类型”列来完成。
if chkGR.Checked = True Then
SQLa = SQLa & "AND Type= 'GR'"
我知道这可以使用if .. else if语句来完成,但是有6个复选框并且可以添加更多,这会变得乏味和大!我需要为每个复选框制作36 if else语句!
我尝试循环遍历控件,如果选中任何一个框,它将删除名称的前三个字母(chk)并将名称添加到SQL select语句,因为这是它们在数据库中的命名方式
但我似乎无法使其发挥作用!到目前为止我已经花了这么多时间。如果有人可以提供帮助,我会很感激!我认为循环是正确的(或者它可能是一团糟,我是新手......)
代码如下:
If optBurger.Checked = True Then
cboSelect.Items.Clear()
SQLa = "SELECT FROM Menu WHERE MENU_ID Like '%Burger%'"
Dim strChk As String = ""
Dim chk As CheckBox
' Loop through each control on the form, we are looking for checkboxes
For Each ctl As Control In grpSubsystem.Controls
If TypeOf ctl Is CheckBox Then
chk = DirectCast(ctl, CheckBox)
If chk.Checked = True Then
SQLa = SQLa & "AND Type ='" & Microsoft.VisualBasic.Mid(chk.Text, 1) & "'"
End If
End If
CallAccess()
RSa.MoveFirst()
Do Until RSa.EOF()
cboSelect.Items.Add(RSa.Fields("MENU_ID").Value)
RSa.MoveNext()
Loop
CloseAccess()
end if
我正在尝试使用checkChanged事件
提前致谢
答案 0 :(得分:1)
只需将复选框值插入某个字符串
即可 Dim MenuList As String = ""
Dim Menu_List As List(Of [String]) = New List(Of String)
If CheckBox1.Checked Then
Menu_List.Add("colomn1")
Else
Menu_List.Remove("colomn1")
End If
If CheckBox2.Checked Then
Menu_List.Add("colomn2")
Else
Menu_List.Remove("colomn2")
End If
...
MenuList = [String].Join(", ", Menu_List.ToArray())
然后您可以使用
运行查询Select " + MenuList + " from MENU
或
MenuList = [String].Join("%' AND Menu_ID like %' ", Menu_List.ToArray())
,查询是
select * from MENU where Menu_ID like '%" + MenuList +"%'
我希望这会对你有所帮助,对不起,如果这段代码有轻微的错误,我没有在编译器上编写这段代码