之前寫了一個設定 BindingSource.Filter 的程式,
在 Form 上面只要呼叫一個設定的函式,就可以讓 Form 上面的 Filter 功能有作用,呼叫的方法如下:
CommQueries.SetFilterFunc(this, BindingSource, 查詢按鈕, 清除查詢條件按鈕,
new LookUpEdit[] { 查詢元件1, 查詢元件2, 查詢元件3, 查詢元件4 });
SetFilterFunc 的寫法如下:
public static void SetFilterFunc(Form frm, BindingSource bs, object filterButton,
object clearButton, LookUpEdit[] filterControls)
{
if (filterButton is SimpleButton)
{
((SimpleButton)filterButton).Click += (s, e) => { DoFilter(frm, bs, filterControls); };
}
if (clearButton is SimpleButton)
{
((SimpleButton)clearButton).Click += (s, e) => { DoClearFilter(frm, bs, filterControls); };
}
}
這樣寫的好處是在 Click 的程式要呼叫 DoFilter 跟 DoClearFilter 的時候可以把那一堆查詢的元件傳進去,
我一開始並不是這樣寫的,那時候沒有想到可以用這一招,
所以傻傻的在 SetFilterFunc 的時候把 Form.Name 跟 filterControls 塞入 Dictionary 裡面去,
然後在 DoFilter 跟 DoClearFilter 的時候再去 Dictionary 裡面去把他們找出來,
然後才去處理我想要處理的事情,
這樣程式不只多了兩倍,也覺得寫得很煩!
後來改用 Lambda 的寫法之後,
程式真得是清爽很多丫!
沒有留言:
張貼留言