2017-02-10 19 views
0

Ich habe eine Winforms-App in C# mit mehreren comboboxes. Diese Comboboxen zeigen Daten aus einer SQL-Datenbank an. Ich kann die Comboboxen erhalten, um die Daten in einer listview anzuzeigen, aber was ich will, ist die Daten zu filtern. Zum Beispiel wählt der Benutzer einen Wert in Combobox1 und die Ergebnisse erscheinen, aber wenn er einen Wert in combobox 2 wählt, werden nur die entsprechenden Werte mit den Regeln von combobox1 angezeigt. es ist wie ein Filter erstellen, aber ich kann nicht herausfinden, wie ich zwischen den Comboboxen interagieren kann. Der Code, den ich habe, ist:C# Verwendung von Comboboxen zum Filtern von SQL-Daten

private void desempenho_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      SqlDataAdapter sda = new SqlDataAdapter(@"select [desc],[enchimento],[compo] from vidros where desempenho = @emp", con); 
      sda.SelectCommand.Parameters.Add("@emp", SqlDbType.NVarChar).Value = desempenho.Text; 
      DataTable DTT = new DataTable(); 
      sda.Fill(DTT); 
      listView1.Items.Clear(); 
      for (int i = 0; i < DTT.Rows.Count; i++) 
      { 
       DataRow dr = DTT.Rows[i]; 
       ListViewItem listitem = new ListViewItem(dr["desc"].ToString()); 
       listitem.SubItems.Add(dr["enchimento"].ToString()); 
       listitem.SubItems.Add(dr["compo"].ToString()); 
       listView1.Items.Add(listitem); 
      } 
     } 
     private void valu_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      SqlDataAdapter SDA2 = new SqlDataAdapter(@"select [desc],[enchimento],[compo] from vidros where valu = @emp2", con); 
      SDA2.SelectCommand.Parameters.Add("@emp2", SqlDbType.NVarChar).Value = valu.Text; 
      DataTable DTT2 = new DataTable(); 
      SDA2.Fill(DTT2); 
      listView1.Items.Clear(); 
      for (int i = 0; i < DTT2.Rows.Count; i++) 
      { 
       DataRow dr = DTT2.Rows[i]; 
       ListViewItem listitem = new ListViewItem(dr["desc"].ToString()); 
       listitem.SubItems.Add(dr["enchimento"].ToString()); 
       listitem.SubItems.Add(dr["compo"].ToString()); 
       listView1.Items.Add(listitem); 
      } 

Diese nur für zwei der Comboboxen ist, aber wenn ich diese eine Arbeit, den Rest bekommen einfach sein.

Vielen Dank im Voraus,

+0

Anstatt wiederholen Sie den SelectedIndexChanged Code wollen, sollten Sie Ein Event-Handler, den Sie von jedem Combo aus aufrufen, der den Wert aller Kombos prüft und das Resultset aus diesen Daten erstellt. – stuartd

Antwort

2

Dies sollte etwas tun, was Sie brauchen. Seine Pseudo und ungetesteten Code, sondern wird durch jede der Kombinationsfelder auf dem Formular durchlaufen und dann können Sie tun, was Sie mit dem Wert in der Liste in jedem Fall

void Main() 
{ 
var cb1 = new ComboBox() 
var cb2 = new ComboBox() 
var frm = new Form() 

var selectedItemAndValue = new List<selectedItem>(); 

foreach (Control ctrl in frm.Controls) 
{ 
    if (ctrl.GetType() == typeof(ComboBox) 
    { 
     var cb = ctrl as ComboBox 
     selectedItemAndValue.Add(new selectedItem { 
     Idx = cb.SelectedIndex, 
     Text = cb.SelectedText, 
     Value = cb.SelectedValue.ToString()}) 

    } 

    //the above code will then give you a list of everything that is selected in each of your combo boxes 
} 
} 

public class selectedItem 
{ 

public int Idx { get; set; } 
public string Text { get; set; } 
public string Value {get; set;} 
} 



// Define other methods and classes here 
Verwandte Themen