2017-11-19 20 views
0

Ich versuche, einen Suchfilter mit mehreren Comboboxes, der Code funktioniert, aber nur im ersten Test, ist das Problem, wenn ich eine andere Suche machen wollen, nachdem nichts auf meiner datagirdview angezeigt wird. Hier ist der Code, ich weiß nicht, was das Problem ist?Suchfilter mit mehreren Comboboxen?

string aFilter = string.Empty; 
string bFilter = string.Empty; 
string cFilter = string.Empty; 

private void applyFilter() 
{ 
    generateFilter(bFilter); 
    generateFilter(cFilter); 
} 

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

private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    DataView dv = new DataView(table); 
    bFilter = string.Format("[Nom complet] LIKE '%{0}%'", comboBox2.SelectedItem.ToString()); 
    applyFilter(); 
    dv.RowFilter = aFilter; 
    dataGridView1.DataSource = dv; 
} 

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    DataView dv1 = new DataView(table); 
    cFilter = string.Format("[Type programme] LIKE '%{0}%'", comboBox1.SelectedItem.ToString()); 
    applyFilter(); 
    dv1.RowFilter = aFilter; 
    dataGridView1.DataSource = dv1; 
} 
+0

was ist Ihre applyFilter Funktion – Sajeetharan

+0

'nur in der ersten test'? kann erklären? – dovid

+0

@lomed es filtert die Datenansicht nur in der ersten Zeit, aber wenn ich den Wert einer Combobox ändern, um einen anderen Filter zu erstellen, funktioniert es nicht und kein Ergebnis wird angezeigt. –

Antwort

0

das Problem ist die aFilter. Jeder Filter wird immer wieder hinzugefügt.

Versuch:

string bFilter = ""; 
string cFilter = ""; 

private string CombinFilters() 
{ 
    var a = new[] { bFilter, cFilter }; //all filters to combin 
    var notNull = a.Where(x => !string.IsNullOrWhiteSpace(x)); 

    if (notNull.Any()) 
     return string.Join(" AND ", notNull); 
    else 
     return null; 
} 

private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    DataView dv = new DataView(table); 
    bFilter = string.Format("[Nom complet] LIKE '%{0}%'", "123"); 
    dv.RowFilter = CombinFilters(); 
    dataGridView1.DataSource = dv; 
} 

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    DataView dv = new DataView(table); 
    cFilter = string.Format("[Type programme] LIKE '%{0}%'", "345"); 
    dv.RowFilter = CombinFilters(); 
    dataGridView1.DataSource = dv; 
} 
+0

Absolut richtig, Vielen Dank es funktioniert (y). –