首页 > 解决方案 > 如何根据 CheckedListBox 选择进行 SQL 查询

问题描述

我有一个CheckedListBox1和它的选择创建一个 SQL 查询来填充 DataGridView。不幸的是,它没有给我任何东西,可能我的 SQL 选择语句不正确,或者我传递了一个不正确的字符串值数组

Private Sub CheckedListBox1_ItemCheck(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemCheckEventArgs) Handles CheckedListBox1.ItemCheck

    Dim i As Integer
    'xx is an array of string, used to store checkedlistbox selection
    Dim xx() As String
    Dim sqlstr2 As String


    For i = 0 To CheckedListBox1.Items.Count - 1 Step i + 1

        If CheckedListBox1.GetItemCheckState(i) = CheckState.Checked Then

            xx(i) = CheckedListBox1.SelectedValue(i)

        End If
    Next
    sqlstr2 = "SELECT * From Table WHERE [TagName] in (' "%, "' '"& [xx] & "' )"'
    SQL.RunQuery(sqlstr2)

    If SQL.SQLDataset.Tables.Count > 0 Then
        DataGridView1.DataSource = SQL.SQLDataset.Tables(0)

    End If

End Sub

标签: vb.net

解决方案


在声明另一个数组之前,请检查 MS 文档。我不相信您每次选中或取消选中一个框时都想运行您的查询。我将代码移动到一个按钮,当用户确定检查时可以单击该按钮。

幸运的是,CheckedListBox 有一个 CheckedItems 集合可供循环使用。在循环中,我们构建一个字符串以在 sql 语句的 In 子句中使用。

检查即时窗口,看看 sql 语句是你想要的

我只能假设您的其余代码涉及您自己的自定义类和方法。我把它注释掉了,所以我可以测试代码。

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim inClause As String = ""
    For Each item In CheckedListBox1.CheckedItems
        inClause &= "'" & item.ToString & "',"
    Next
    'Get rid of the final comma
    inClause = inClause.TrimEnd(","c)
    Dim sqlstr2 = "SELECT * From Table WHERE [TagName] in (" & inClause & ");"
    Debug.Print(sqlstr2)
    'Sql.RunQuery(sqlstr2)
    'If Sql.SQLDataset.Tables.Count > 0 Then
    '    DataGridView1.DataSource = Sql.SQLDataset.Tables(0)
    'End If
End Sub

推荐阅读