使用多个组合框过滤datagridview

时间:2017-04-17 16:36:15

标签: c# .net winforms

我正在尝试使用datagridview进行简单的产品代码搜索。

我能够过滤数据库,但无法获得我想要的所有功能

我目前将其设置为

 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
 {
     productsBindingSource.Filter = string.Format("Type = '{0}'",
     comboBox1.SelectedItem.ToString());
 }

 private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
 {
     productsBindingSource.Filter = string.Format("Type = '{0}' AND Fitting = '{1}'", 
     comboBox1.SelectedItem.ToString(), 
     comboBox2.SelectedItem.ToString());
 }

此代码有效,但在做出选择并更改comboBox1之后,数据会重置并且不会保留comboBox2的选择。

我在目前的代码中理解这不会发生,但我无法弄清楚如何实现这一点。

我还想在将来添加一个文本框,让它更加缩小过滤器。

1 个答案:

答案 0 :(得分:0)

你应该更一般地接近这个

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    FilterProducts();
}

private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
    FilterProducts();
}

// Create a function to handle filters
private void FilterProducts() 
{
    string filter = "";
    if (comboBox1.SelectedItem != null) 
    {
        filter += string.Format("Type = '{0}'", comboBox1.SelectedItem.ToString());
    }

    if (comboBox2.SelectedItem != null) 
    {
        if (filter.length > 0) filter += "AND "
        filter += string.Format("Fitting = '{0}'", comboBox2.SelectedItem.ToString());
    }

    // Add another like above for your future textbox
    // if (!string.IsNullOrEmpty(textBox1.Text)) 
    // {
    //     if (filter.length > 0) filter += "AND "
    //     filter += string.Format("OtherColumn = '{0}'", textBox1.Text);
    // }

    productsBindingSource.Filter = filter;
}

代码可以进一步重构以获得更好的DRY标准,但这至少应该让你开始。