如何使用多个复选框

时间:2018-01-11 12:54:04

标签: c# visual-studio checkbox datagridview

这是我在这个网站上的第一个问题所以如果我格式不正确,我会提前道歉。 我正在创建一个系统,它应该能够使用多个复选框搜索数据库(dataGridView)。我在网上找到了一些代码,使用3个复选框进行搜索,但我不确定如何扩展它。我需要能够使用50多个复选框进行搜索。按下搜索按钮后将执行以下代码,该按钮将在我的数据库中显示相应的行。我想以最有效的方式将此解决方案扩展到50多个复选框。

private void button1_Click(object sender, EventArgs e)
    {
        String filterdata = "";



        if (checkBox1.Checked)
        {
            if (checkBox2.Checked || checkBox3.Checked)
            {
                filterdata = "'T05A1.1',";

            }
            else
            {
                filterdata = "'T05A1.1'";
            }
        }
        if (checkBox2.Checked)
        {
            if (checkBox3.Checked)
            {
                filterdata = filterdata + "'C16D6.2',";

            }
            else
            {
                filterdata = filterdata + "'C16D6.2'";
            }

        }

        if (checkBox3.Checked)
        {
            filterdata = filterdata + "'F41E7.3'";
        } 


        con.Open();
        SqlCommand cmd = con.CreateCommand();
        cmd.CommandType = CommandType.Text;
        //cmd.CommandText = "Select * from Table1 where elegansgeneID ='" + filterdata + "'";
        cmd.CommandText = "Select * from Table1 where elegansgeneID in(" + filterdata + ")";
        cmd.ExecuteNonQuery();
        DataTable dt = new DataTable();
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(dt);
        dataGridView1.DataSource = dt;

        con.Close(); 

    }

2 个答案:

答案 0 :(得分:1)

尝试这种更短的方法:

private void Button1_Click(object sender, EventArgs e)
{
    var values = new List<string>();

    if (checkBox1.Checked)
        values.Add("'T05A1.1'");

    if (checkBox2.Checked)
        values.Add("'C16D6.2'");

    if (checkBox3.Checked)
        values.Add("'F41E7.3'");

    // and so on

    String filterdata = string.Join(",", values);

    ...
}

答案 1 :(得分:0)

亚历山大彼得罗夫的回答是正确的。 但如果你得到超过50个复选框,那么我建议你使用CheckBoxList。代码变得更加简单。

  public Form1()
    {
        InitializeComponent();

        List<string> filters = new List<string> { "T05A1.1", "C16D6.2", "F41E7.3" };

        checkedListBox1.Items.Clear();
        foreach (string filter in filters)
        {
            checkedListBox1.Items.Add(filter);
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        List<string> selectedFilter = new List<string>();

        for (int i = 0; i < checkedListBox1.CheckedItems.Count; i++)
        {
            selectedFilter.Add("'" + checkedListBox1.CheckedItems[i].ToString() + "'");
        }
        string query = "Select * from Table1 where elegansgeneID in(" + string.Join(",", selectedFilter) + ")";
    }

使用CheckBoxList,您只需在过滤器列表变量中添加过滤器,它就会生成您的列表。这样也可以缩短你的代码。