2016-05-15 12 views
0

Ich würde gerne wissen, wie kann ich Daten basierend auf mehreren Benutzereingaben in verschiedenen Textfelder oder Combobox filtern. Es funktioniert aber nur die letzte Eingabe. Wie kann ich sie miteinander verbinden?C# Wie man RowFilter in DataView multipliziert

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

Jede Antwort wird geschätzt!

Antwort

1

Sie können Ihren Filter in einer Variablen wie folgt speichern:

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

dann eine Methode, wie

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

schreiben Dann werden Sie es wie folgt verwendet werden:

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

Diese sollte nur eine Inspiration sein, wie Sie das tun können, es ist nicht für den Einsatz in der Produktion vorgesehen :-)

+0

Danke. Grundsätzlich funktioniert es, aber wenn ich das Zeichen aus der Textbox lösche, filtert es die Datenansicht nicht ungefiltert. Hast du irgendeine Idee? – NOGRP90

+0

Die Apply-Filtermethode fügt nur Filterregel hinzu. Müssen Sie den Code ändern, der nur einen Filter pro Feld anwendet. (Regex, string.replace ....) –

+0

Ich verstehe nicht wirklich, ich bin Neuling in der Codierung. Könntest du bitte aufschreiben? :) – NOGRP90