2016-05-15 5 views
0

Я хотел бы знать, как я могу фильтровать данные на основе ввода нескольких пользователей в разных текстовых или комбинированных томах. Он работает, но только самый последний вход. Как я могу связать их вместе?C# Как несколько RowFilter в DataView

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; 
    } 

Любой ответ будет оценен!

ответ

1

Вы можете сохранить фильтр в переменной, как это:

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

затем написать метод, как

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; 
    } 
    } 
} 

Тогда вы будете использовать его как это:

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; 
    } 

Этот должен быть только вдохновением, как вы можете это сделать, он не предназначен для использования в производстве :-)

+0

Спасибо. В основном это работает, но когда я удаляю символ из текстового поля, он не отфильтровывает dataview. Есть ли у вас какие-либо идеи? – NOGRP90

+0

Использовать фильтр только для добавления правил фильтрации. Можете ли вы изменить код, который будет применяться только к одному фильтру на поле. (Regex, string.replace ....) –

+0

Я действительно не понимаю, я новичок в кодировании. Не могли бы вы записать? :) – NOGRP90

Смежные вопросы