Infragistics 是.NET平台優秀的控件供應商,囊括了WinForms,ASP.NET,Silverlight,WPF,Windows Phone等所有關於微軟.NET技術的界面控件。借助於這些功能復雜的控件,為ERP的界面提供了靈活的操作能力。
本篇不談控件開發,只詳細說明ERP系統如何使用Infragistics WinForms,而不用.NET 自帶的控件。
1 文本編輯控件提示必須輸入值
如果一個文本編輯控件必須輸入值,有許多實現方法可以借鑒。看金蝶ERP的實現,在文本標簽控件位置處用星號標識。
如果用Infragistics WinForms的TextEditor,可實現如下的效果:
對於必須輸入值的文本編輯控件,控件末尾有一個星號圖片標識。如果這個編輯控件有值,則圖標消失。
只需要一行代碼,Infragistics WinForms可實現這個效果。
txtCustomerNo.Appearance.Image = Properties.Resources.Required_Field_16;
2 控件的數據查找窗體
繼續比較金蝶界面,還是用上面的那張模擬BOM的圖片,工藝路線和計量單位文本編輯控件后面有一個小圖標,表示點這個圖標,可彈出一個數據查找窗體,這樣方便用戶錄入數據。
ERP系統也有類似的實現,先看界面效果圖,注意左邊第一個控件Ccy貨幣輸入控件,它后面有一個小按鈕。
當鼠標離開時,Ccy控件后面的小按鈕自動消失。為了實現這個特性,也只需要一行代碼:
EditorButton button = new EditorButton("lookup"); button.Text = "..."; txtCcy.ButtonsRight.Add(button);
3 控件支持鑽取
鑽取這個詞的含義來源於報表中,主表點擊事件鑽取到子表明細記錄。ERP中也吸取了這個思想,可以給控件設定要鑽取的功能。比如上圖中的貨幣Ccy,銷售員Salesman,點擊文本編輯控件中值,可打開相應的主檔功能,查看詳細信息。
4 Grid控件支持過濾,排序,分組,字段選取,查找,列順序重排列,導出Excel
以圖為例子,參考銷售訂單明細中的網格控件。
Code Project中有幾篇文章,是專門講解通過重寫微軟的DataGridView控件,如何具備以上列出的特性。
Infragistics WinForms已經內置了以上特性,而且支持屬性序列化。比如上圖中列的順序是Line No,Item No
我可以將Item No拖動到Line No列的前面,在窗體關閉時,保存這個順序,下次打開窗體時讀取字段順序值,恢復成用戶設定的順序。能夠保存用戶偏號(Profile)是系統友好的一個主要方面。
5 日期時間控件DateTimePicker 支持空值
.NET WinForms自帶的日期時間控件不支持空日期時間值,這里的空值不是指類型DataTime?。當打開用戶界面創建新的單據時,如果日期控件沒有任何設定值動件,日期控件將返回空時間值,也就是保持NULL值。
6 按鈕Button控件支持圖片
參考下面的報表打印按鈕,它可以顯示一個打印的小圖標。Delphi很多年前就具備這個特性。
7 控件支持屬性序列化
窗體中對控件的布局Layout的修改,可以保存到數據庫或存儲介質中,當再次加載控件時,可以恢復成上次用戶修改的布局樣式(Layout)。這個特性,在Grid,TreeView控件有很重要的作用。
在窗體關閉前,讀取控件的屬性,保存到數據庫中,讀取屬性值:
values.Add(new ComponentPropertyValue("AllowRowSummaries", true));
界面加載時,根據數據庫中的記錄設置控件屬性:
if (values.ContainsKey("AllowRowSummaries") && Convert.ToBoolean(values["AllowRowSummaries"].Value)) { current.AllowRowSummaries = AllowRowSummaries.True; }
把上面兩段代碼,分別放到窗體加載和關閉事件中,可參考下面的程序代碼,實際保存用戶偏號。
protected override void OnLoad(EventArgs e) { LoadFormProfile(); } protected override void OnClosed(EventArgs e) { SaveFormProfile(); }
8 控件增加上下文菜單
文本編輯類控件,內置標准的剪切復制粘貼功能,還應該增加這三個編輯功能的上下文菜單。
日期時間控件,也支持剪切復制粘貼功能。
9 控件的Tab Index順序要預先設置好,Enter鍵可以當Tab鍵使用
ERP界面大部分控件是單行文本輸入,可以考慮給編輯控件重寫鍵盤事件,按Enter鍵可切換到下一個Tab Index控件。
protected override void OnKeyDown(KeyEventArgs e) { if (!base.DesignMode) { if ((!e.Alt && !e.Control) && !e.Shift) { if (e.KeyCode == Keys.Enter) { SendKeys.Send("{TAB}"); e.Handled = true; }
這個特性在Grid控件中非常有用,回車后直接跳到下一個單元格(Cell),最后一個單元格后再按回車鍵,可跳到下一行。
10 可折疊式組合框 Expandable Groupbox
上面的截圖中用Groupbox將特性相近的控件包括起來,這是界面設計中很友好的一種表達方式。如果窗體的空間位置不夠,或是控件的值僅僅用於參考,可以考慮用UltraExpandableGroupBox,它的模樣參考下面的界面例子。
UltraExpandableGroupBox左上角有一個可折疊或展表的符號,可節省屏幕空間。
11 Grid控件支持打印預覽和打印
Grid控件內置了打印功能,參考下圖,在數據查詢類功能中有很重要的作用。
Infragistics控件的設計人員設計這個打印功能,考慮了環保方面的要求(節省紙張和墨水)。