2017-02-10 4 views
0

私はwinformsアプリケーションをC#でいくつかの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); 
      } 

これはのみコンボボックスの2のためですが、私が取得するときに、残りの作業この1つはシンプルになります。

ありがとうございます。

+0

ではなく、各イベントでのSelectedIndexChangedコードを繰り返すことができ、あなたが持っている必要があります各コンボから呼び出す1つのイベントハンドラ。すべてのコンボの値を調べ、そのデータから結果セットを構築します。 – 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 
関連する問題