我希望通过组合多个复选框和文本框查询来过滤存储在MySql数据库中的数据。您可以在此处找到表单的屏幕截图:
搜索表格:
TABLES:
PROJECTS TABLE
DETAILS TABLE
PS:“项目”表中只有ID字段是唯一的!
如果用户在这三个文本框中的任何一个中写入,则文本框的其余部分将变空。目前它使用文本框工作。我想将搜索条件与复选框结合起来。
假设用户在TEXTBOX1中写入并从复选框中选择FAS,VAPA和ACC,结果应该列在我的列表视图框中。
这是我到目前为止的代码:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If TextBox1.Text = "" And TextBox2.Text = "" And TextBox3.Text = "" Then
MsgBox("Bir arama kriteri girin!", MsgBoxStyle.Critical, "UYARI!")
Exit Sub
End If
ListView1.Items.Clear()
If TextBox1.Text <> "" Then
Dim cmd As New MySqlCommand
Dim ad As New MySqlDataAdapter
Dim projeadi As String = "select projects.ID, projects.PROJEADI, projects.TEKLIFFIRMA, details.ID, details.MARKA from projects INNER JOIN details ON projects.ID = details.ID WHERE PROJEADI='" & TextBox1.Text & "';"
Dim tbl As New DataTable
Dim i As Integer
With cmd
.CommandText = projeadi
.Connection = con
End With
With ad
.SelectCommand = cmd
.Fill(tbl)
End With
For i = 0 To tbl.Rows.Count - 1
With ListView1
.Items.Add(tbl.Rows(i)("ID"))
With .Items(.Items.Count - 1).SubItems
.Add(tbl.Rows(i)("PROJEADI"))
.Add(tbl.Rows(i)("TEKLIFFIRMA"))
.Add(tbl.Rows(i)("MARKA"))
End With
End With
Next
ElseIf TextBox2.Text <> "" Then
Dim cmd As New MySqlCommand
Dim ad As New MySqlDataAdapter
Dim tekliffirma As String = "select projects.ID, projects.PROJEADI, projects.TEKLIFFIRMA, details.ID, details.MARKA from projects INNER JOIN details ON projects.ID = details.ID WHERE TEKLIFFIRMA='" & TextBox2.Text & "';"
Dim tbl As New DataTable
Dim i As Integer
With cmd
.CommandText = tekliffirma
.Connection = con
End With
With ad
.SelectCommand = cmd
.Fill(tbl)
End With
For i = 0 To tbl.Rows.Count - 1
With ListView1
.Items.Add(tbl.Rows(i)("ID"))
With .Items(.Items.Count - 1).SubItems
.Add(tbl.Rows(i)("PROJEADI"))
.Add(tbl.Rows(i)("TEKLIFFIRMA"))
.Add(tbl.Rows(i)("MARKA"))
End With
End With
Next
ElseIf TextBox3.Text <> "" Then
Dim cmd As New MySqlCommand
Dim ad As New MySqlDataAdapter
Dim marka As String = "select projects.ID, projects.PROJEADI, projects.TEKLIFFIRMA, details.ID, details.MARKA from projects INNER JOIN details ON projects.ID = details.ID WHERE MARKA='" & TextBox3.Text & "';"
Dim tbl As New DataTable
Dim i As Integer
With cmd
.CommandText = marka
.Connection = con
End With
With ad
.SelectCommand = cmd
.Fill(tbl)
End With
For i = 0 To tbl.Rows.Count - 1
With ListView1
.Items.Add(tbl.Rows(i)("ID"))
With .Items(.Items.Count - 1).SubItems
.Add(tbl.Rows(i)("PROJEADI"))
.Add(tbl.Rows(i)("TEKLIFFIRMA"))
.Add(tbl.Rows(i)("MARKA"))
End With
End With
Next
End If
请告知。
谢谢。
奥古兹
答案 0 :(得分:1)
好吧,因为我不知道对应于复选框过滤条件的表格字段的名称,我假设它是Projects.Sistem
我会将所有复选框分组到GroupBox
中,以便使用For
循环来检查所有复选框。如果选中其中任何一个,则会在SQL语句的末尾添加AND
子句。
完成后,另一个For
将检查每个选中的CheckBox,将复选框的Name
添加到最终的SQL语句中,以获取这样的SQL语句
SELECT projects.ID, projects.PROJEADI, projects.TEKLIFFIRMA, details.ID,
details.MARKA from projects INNER JOIN details ON projects.ID = details.ID
WHERE ..... AND Projects.Sistem IN ('FAS', 'VAPA', 'CCTV',.....)
以下代码只是一个近似值。您需要检查它并使其适应您现有的代码
Dim SQL As String = ""
If projeadi <> "" Then
SQL = projeadi
End If
If tekliffirma <> "" Then
SQL = tekliffirma
End If
If marka <> "" Then
SQL = marka
End If
For Each chkBox As CheckBox in GroupBox1.Controls
If chkBox.Checked = True Then
SQL = SQL & " AND Project.Sistem IN ( "
Exit For
End if
Next
For Each chkBox As CheckBox In GroupBox1.Controls
If chkBox.Checked = True Then
Sql = Sql & "'" & chkBox.Name & "',"
End If
Next
Sql = Sql.Substring(0, Sql.Length - 1)
Sql = Sql & ")"