【问题标题】:How can i search a datagridview using multiple checkboxes如何使用多个复选框搜索 datagridview
【发布时间】:2018-06-20 19:32:43
【问题描述】:

这是我在这个网站上的第一个问题,所以如果我的格式不正确,我提前道歉。 我正在创建一个应该能够使用多个复选框搜索数据库(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(); 

    }

【问题讨论】:

  • 一组复选框,也许吧?
  • 你需要 50 多个复选框来做什么?你真的应该考虑其他可能性......

标签: c# visual-studio checkbox datagridview


【解决方案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);

    ...
}

【讨论】:

    【解决方案2】:

    Alexander Petrov 的回答是正确的。 但是如果你得到超过 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,您只需将过滤器添加到过滤器列表变量中,它就会生成您的列表。这也将使您的代码保持简短。

    【讨论】:

      猜你喜欢
      • 2018-03-26
      • 1970-01-01
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多