フィルタリング/検索の方法がありますが、これWindows Form
は検索を提供するすべてのものに対して作成されています。この大量の繰り返しコードを回避できるように、基本クラスでジェネリックメソッドを作成しようとしています。
これが私が修正したい元のコードです:
private void LoadData()
{
GridFilter filter = new GridFilter();
filter.AddRule(dgvColDescription.DataPropertyName, txtDescription.Text);
if (cboColor.SelectedIndex != -1)
{
filter.AddRule(dgvColMaterialColorId.DataPropertyName, cboColor.SelectedValue.ToString());
}
...
//a lot more of this filter.AddRule stuff
...
}
ここには2つのことがあると思います。インスタンスの必要性GridFilter
と、使用する必要のある2種類のコントロールです。
これが一般的な方法の私の試みであると言った:
protected virtual void AddFilterRules<T>(Control ctrl, String str) where T : GridFilter
{
T filter;
if (ctrl is ComboBox)
{
if ((ctrl as ComboBox).SelectedIndex != -1)
{
filter.AddRule(/*dgvColMaterialColorId.DataPropertyName*/ str, (ctrl as ComboBox).SelectedValue.ToString());
}
}
if (ctrl is TextBox)
{
filter.AddRule(/*dgvColCode.DataPropertyName*/str, ctrl.Text);
}
}
コメントされた部分を文字列として渡すことができるかどうかまだわからないため、いくつかのコメントがありますが、私にとってより大きな問題はIDE
、filter
変数についてから得られるエラーです。
割り当てられていないローカル変数「フィルター」の使用
結局、それからジェネリックメソッドを作ることは可能ですか?どうすればそれを行うことができますか?