使用两个文本框过滤DataGridView

时间:2014-03-20 10:35:09

标签: c# wpf datagridview

我有一个用数据源和表适配器创建的DGV。在表adapdter中,我定义了两个参数来进行搜索。那么我有一个带有数据网格视图的WPF和两个用于进行搜索的文本框。

 public partial class FormConsultaAdvogadosDS : Form
{
  public FormConsultaAdvogadosDS()
    {
        InitializeComponent();
    }

    private void FormConsultaAdvogadosDS_Load(object sender, EventArgs e)
    {
        // TODO: This line of code loads data into the 'dataSetAdvogados.Advogado' table. You can move, or remove it, as needed.
        this.advogadoTableAdapter.Fill(this.dataSetAdvogados.Advogado);

    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        try
        {
            this.advogadoTableAdapter.FillBy(this.dataSetAdvogados.Advogado, textBox1.Text);
        }
        catch (System.Exception ex)
        {
            System.Windows.Forms.MessageBox.Show(ex.Message);
        }
    }

    private void textBox2_TextChanged(object sender, EventArgs e)
    {
        try
        {
            this.advogadoTableAdapter.FillBy1(this.dataSetAdvogados.Advogado, textBox2.Text);
        }
        catch (System.Exception ex)
        {
            System.Windows.Forms.MessageBox.Show(ex.Message);
        }
    }
}

这是我现在的代码。 我只使用其中一个文本框进行过滤就可以了,它可以过滤掉一切。但我真正需要的是第一次过滤内的过滤器。喜欢第一次过滤的依赖。 如果我在textbox1中插入文本“ABC”,显示的行有“ABC”然后,使用第一个过滤器,我需要在textbox2“DEF”中优化插入,但它不起作用。它会使新搜索忽略第一个过滤。有人能帮我吗? 此致

1 个答案:

答案 0 :(得分:0)

过滤一个集合时,通常需要管理两个集合。一个是包含所有可用值/项的原始未过滤集合,另一个是仅包含与过滤条件匹配的项目的过滤集合。

如果您有两个过滤器,则需要管理三个集合。一个是原始的未经过滤的集合,第二个是第一个过滤的集合,它只包含与第一个过滤条件匹配的项目,第三个是仅包含与第二个条件匹配的项目的第二个过滤集合。

因此,如果不清楚,这是一个例子。我们遇到这样的情况:用户输入ABC,第二个集合返回与搜索string匹配的原始(完整)集合中的所有项目。现在这里是重要的部分。我们需要过滤已经由ABC string过滤的第二个集合,而不是使用第二个过滤器再次过滤原始集合。

第三个集合是绑定到UI的数据集合,仅显示原始集合中符合两个过滤条件的项目。


更新>>>

作为另一个例子,您可以使用LinQ过滤您的第二个集合(已经按第一个条件过滤了):

ThirdCollection = new ObservableCollection<string>(SecondCollection.Where(i => 
    SecondFilterConditionMethod(i)));

现在这个SecondFilterConditionMethod方法可以包含任何类型的条件,只要它返回truefalse

private bool SecondFilterConditionMethod(string item)
{
    // implement whatever filter condition here
    return item.StartsWith("A");
}

现在您可能没有使用string,但无论您使用何种数据类型,这个想法都是一样的。另请参阅我在Stack Overflow上的Change combo box item list depending on the Textbox Text问题的答案,以获取更多示例。