简体   繁体   English

C# 如何在 DataView 中使用多个 RowFilter

[英]C# How to multiple RowFilter in DataView

I'd like to know how can I filter data based on multiple user's input in different textbox or combobox.我想知道如何根据多个用户在不同文本框或组合框中的输入来过滤数据。 It works but only the latest input.它有效,但仅适用于最新输入。 How can I link them together?我怎样才能将它们链接在一起?

    private void text_Sname_TextChanged(object sender, EventArgs e)
    {
        DataView dv = new DataView(dt);                      
        dv.RowFilter = string.Format ("[Supplier Name] LIKE '%{0}%'", text_Sname.Text);
        dataGridView1.DataSource = dv;            
    }

    private void text_Pnumber_TextChanged(object sender, EventArgs e)
    {
        DataView dv = new DataView(dt);
        dv.RowFilter = string.Format("[Part Number] LIKE '%{0}%'", text_Pnumber.Text);
        dataGridView1.DataSource = dv;
    }

    private void text_Dwgnumber_TextChanged(object sender, EventArgs e)
    {
        DataView dv = new DataView(dt);
        dv.RowFilter = string.Format("[Drawing Number] LIKE '%{0}%'", text_Dwgnumber.Text);
        dataGridView1.DataSource = dv;
    }

Any answer will be appreciated!任何答案将不胜感激!

You can save your filter in a variable like this:您可以将过滤器保存在这样的变量中:

string m_currentFilter=string.Empty;
string m_partNumberFilter=string.Empty;
string m_drawingNumberFilter=string.Empty;

then write a method like然后写一个方法,如

 private void applyFilter()
{
    generateFilter(m_drawingNumberFilter);
    generateFilter(m_partNumberFilter);
}

private void generateFilter(string filter)
{
  if(!string.IsNullOrEmpty(filter))
  {
   if(string.IsNullOrEmpty(m_currentFilter))
    {
      m_currentFilter=filter;
    }else
    {
       m_currentFilter+= " AND " + filter;
    }
   }
 }

Then you will use it like this:然后你会像这样使用它:

    private void text_Pnumber_TextChanged(object sender, EventArgs e)
        {
            DataView dv = new DataView(dt);
            m_partNumberFilter=string.Format("[Part Number] LIKE '%{0}%'", text_Pnumber.Text);
            applyFilter();
            dv.RowFilter = m_currentFilter;
            dataGridView1.DataSource = dv;
        }

private void text_Dwgnumber_TextChanged(object sender, EventArgs e)
    {
        DataView dv = new DataView(dt);
       m_drawingNumberFilter= string.Format("[Drawing Number] LIKE '%{0}%'", text_Dwgnumber.Text);
        applyFilter();
        dv.RowFilter = m_currentFilter;
        dataGridView1.DataSource = dv;
    }

This should only be an inspiration how you can do that, it's not porposed for using in production :-)这应该只是你如何做到这一点的灵感,它不适合在生产中使用:-)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM