2017-04-17 16 views
1

私はdatagridviewを使って簡単な製品コード検索をしようとしています。複数のコンボボックスでdatagridviewをフィルタリングする

私は

私は現在、それはこのコードが動作する

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    productsBindingSource.Filter = string.Format("Type = '{0}'", 
    comboBox1.SelectedItem.ToString()); 
} 

private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    productsBindingSource.Filter = string.Format("Type = '{0}' AND Fitting = '{1}'", 
    comboBox1.SelectedItem.ToString(), 
    comboBox2.SelectedItem.ToString()); 
} 

として設定されているが、選択が行われ、私が変更された後に必要なすべての機能を取得することができ、データベースをフィルタリングすることができる午前ではなく、 comboBox1データがリセットされ、comboBox2の選択を維持しません。

私の現在のコードではこれは起こらないと私は理解していますが、これをどうやって実現するのか分かりません。

今後もテキストボックスを追加して、フィルタをさらに絞り込むこともお勧めします。

答えて

0

あなたはもう少し一般的にそう

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    FilterProducts(); 
} 

private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    FilterProducts(); 
} 

// Create a function to handle filters 
private void FilterProducts() 
{ 
    string filter = ""; 
    if (comboBox1.SelectedItem != null) 
    { 
     filter += string.Format("Type = '{0}'", comboBox1.SelectedItem.ToString()); 
    } 

    if (comboBox2.SelectedItem != null) 
    { 
     if (filter.length > 0) filter += "AND " 
     filter += string.Format("Fitting = '{0}'", comboBox2.SelectedItem.ToString()); 
    } 

    // Add another like above for your future textbox 
    // if (!string.IsNullOrEmpty(textBox1.Text)) 
    // { 
    //  if (filter.length > 0) filter += "AND " 
    //  filter += string.Format("OtherColumn = '{0}'", textBox1.Text); 
    // } 

    productsBindingSource.Filter = filter; 
} 

コードは、さらにより良いDRY規格のためにリファクタリングすることができますが、これは、少なくとも、あなたが始める必要があるように、このアプローチをする必要があります。

+0

ありがとうございましたこれは私が欲しいのとまったく同じように動作しています –

+0

うれしい私は助けることができました!あなたが瞬間があるなら、上下の矢印の下の左のチェックボックスをクリックしてください。 –

+0

@AndreTurgeon - ホロのチェックボックスにチェックを入れて、誰もがこの質問に答えられるようにしてください。それを刻むと、あなたにいくつかのポイントが与えられます。 –