我有一個過濾/搜索方法現在每寫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
...
}
有兩件事情在這裏,我想 - 爲GridFilter
和需要情況下的兩種類型的控制,我需要使用。
說了,這裏是我的一個通用的方法試試:
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
變量,它的錯誤:
使用未分配的局部變量的「過濾器」
畢竟有可能制定一個通用的方法,我該怎麼做?
IDE錯誤是指它看不到創建該對象實例的行。 – 2013-03-01 14:47:01
從代碼中,它看起來像你想做一個擴展方法,所以你可以調用myGridFilterVar.AddFilterRules。要做到這一點,從身體刪除T過濾器並定義方法爲AddFilterRules(此T篩選器,控制ctrl,字符串str)其中...擴展方法也必須是靜態的。 –
2013-03-01 14:56:41