如何登记由checkedlistbox过滤的多条记录

how to enlist multiple records filtered by checkedlistbox

我有一个数据网格视图和选中的列表框。选中的列表框是从数据库项目中填充的 我想使用选中的列表框的项目创建过滤器意味着通过选中选中的列表框的项目来填充数据网格视图 现在的问题是数据网格视图只显示一条记录对应于选中的项目但不显示如果选中多个复选框项,则为多条记录。

        SqlConnection connection = new SqlConnection();
        connection.ConnectionString = @"Data Source=DESKTOP-50ME4GC\SQLEXPRESS;Initial Catalog=autolab;Integrated Security=True";
        if (pn.CheckedItems.Count != 0)
        {
            // If so, loop through all checked items and print results.  
            string s = "";
            int x;
            for (x = 0; x <= pn.CheckedItems.Count - 1; x++)
            {
                s = s + pn.CheckedItems[x].ToString();
            }
            connection.Open();
            SqlCommand cmd = new SqlCommand("SELECT *  from test_report  inner join tests  on test_report.test_name = tests.Test_name WHERE tests.Test_name IN ('" + s + "') ", connection);
            SqlDataAdapter adapter = new SqlDataAdapter(cmd);


            DataTable tbl = new DataTable();


           adapter.Fill(tbl);


            dt.DataSource = tbl;


            connection.Close();

        }

您的 for 循环似乎连接了列表项。尝试写

s = s + pn.CheckedItems[x].ToString() + ", ";

不要忘记删除循环后的最后一个“,”。

首先,您的项目名称字符串组成不正确,假设您有这些元素:

One
Two
Three

你的 concat 会这样做:

OneTwoThree

当你想要的时候:

'One','Two','Three'

所以你需要像这样更正连接:

        string s = "";
        int x;
        for (x = 0; x <= pn.CheckedItems.Count - 1; x++)
        {
            s = s + "'" + pn.CheckedItems[x].ToString() + "',";
        }

        s = s.Substring(0, s.Length - 1);

并将查询更正为:

SqlCommand cmd = new SqlCommand("SELECT *  from test_report  inner join tests  on test_report.test_name = tests.Test_name WHERE tests.Test_name IN (" + s + ") ", connection);