我目前正在使用SQL后端和vb.net Windows Forms前端。我试图根据用户将选择的复选框列表从SQL中提取报告。
为此,我将在SQL中使用IN
子句。唯一的问题是如果我在vb.net中使用if语句来构建字符串,那么它将成为设置字符串的大量代码。
我希望有人知道更好的方法来做到这一点。下面的代码示例仅显示选择第1行并同时选择第1行和第2行。我将需要代码才能选择任何分类的行。该字符串必须是行号,并在数字后面加逗号。这种方式,当我在我的SQL查询中包含代码时,它不会出错。
以下是代码:
Dim LineString As String
'String set up for line pull
If CBLine1.Checked = False And CBLine2.Checked = False And CBLine3.Checked = False And CBLine4.Checked = False And _
CBLine7.Checked = False And CBLine8.Checked = False And CBLine10.Checked = False And CBLine11.Checked = False And CBLine12.Checked = False Then
MsgBox("No lines selected for download, please select lines for report.")
Exit Sub
End If
If CBLine1.Checked = True And CBLine2.Checked = False And CBLine3.Checked = False And CBLine4.Checked = False And _
CBLine7.Checked = False And CBLine8.Checked = False And CBLine10.Checked = False And CBLine11.Checked = False And CBLine12.Checked = False Then
MsgBox("This will save the string as only line 1")
ElseIf CBLine1.Checked = True And CBLine2.Checked = True And CBLine3.Checked = False And CBLine4.Checked = False And _
CBLine7.Checked = False And CBLine8.Checked = False And CBLine10.Checked = False And CBLine11.Checked = False And CBLine12.Checked = False Then
MsgBox("This will save the string as only line 1 and 2")
End If
必须将最终字符串插入到如下所示的SQL语句中:
SELECT *
FROM tabl1
WHERE LineNumber IN (-vb.netString-)
上面的代码需要为字符串添加逗号。
答案 0 :(得分:1)
首先,您需要设置所有复选框,并将Tag属性设置为它们引用的行号。因此,例如,CBLine1复选框将其属性Tag设置为值1(依此类推所有其他复选框)。
这可以使用WinForm设计器轻松完成,或者,如果您愿意,可以在运行时在Form load事件中完成。
下一步是检索所有选中的复选框并提取Tag属性以构建所需的行列表。这可以使用一些Linq
来完成Dim linesSelected = new List(Of String)()
For Each chk in Me.Controls.OfType(Of CheckBox)().
Where(Function(c) c.Checked)
linesSelected.Add(chk.Tag.ToString())
Next
现在您可以开始验证输入
了if linesSelected.Count = 0 Then
MessageBox.Show("No lines selected for download, please select lines for report.")
Else If linesSelected.Count = 1 Then
MessageBox.Show("This will save the string only for line " & linesSelected(0))
Else
Dim allLines = string.Join(",", linesSelected)
MessageBox.Show("This will save the string for lins " & allLines)
End If
当然,List(Of String)和string.Join方法非常适合为您的查询构建IN子句
答案 1 :(得分:0)
我觉得我只有一半得到你的问题,但我希望这会有所帮助。在VB.net中,我们显示状态为启用或禁用的表单列表。
复选框在选中时仅显示已启用的表单。
SELECT * FROM forms WHERE (Status = 'Enabled' or @checkbox = 0)
查询实际上有一个更长的where子句,它以相同的方式处理下拉选项。这应该可以帮助您将后端VB传递给简单的SQL语句。
答案 2 :(得分:-1)
If checkboxes 3...10 = false then
If checkbox 1 = true then
If checkbox 2 is true then
A
Else if checkbox 2 = false then
B
End if
Else
C
End if