2017-02-10 67 views
0

我在C#中有一個winforms應用程序,有幾個comboboxes。這些組合框顯示來自SQL數據庫的數據。我可以讓組合框在listview中顯示數據,但我想要的是過濾數據。 例如,用戶在combobox1中選擇一個值並顯示結果,但是當他在combobox 2中選擇一個值時,只會顯示combobox1規則的相應值。 這就像創建一個過濾器,但我不知道如何我可以在組合框之間進行交互。 我的代碼是:c#使用組合框來過濾sql數據

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

這僅僅是兩個組合框的,但是當我得到這個一個工作其餘的將是簡單的。

在此先感謝,

+0

比而重複每個事件的SelectedIndexChanged代碼,你應該有一個事件處理程序,您從每個組合中調用,檢查所有組合值的值,並從該數據構建結果集。 – stuartd

回答

2

這應該做一些你需要的東西。它的僞和未經考驗的代碼,但是會通過你的每一個窗體上的組合框迭代,然後你可以在列表中你想要做什麼用的價值

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