轉帖|使用教程|編輯:龔雪|2022-05-27 10:45:53.373|閱讀 245 次
概述:本文主要介紹如何在Winform開發框架中下拉列表綁定字典以及使用緩存提高界面顯示速度,歡迎下載推薦產品體驗!
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
在我們開發WinForm界面的時候,往往需要綁定數據字典操作,也就是綁定一些下拉列表或者一些列表顯示等,以便我們方便選擇數據操作,常見的字典綁定操作就是對下拉列表的處理,本文是基于DevExpress界面的一些處理操作,原理也適用于常規Winform界面或者DotNetBar控件界面處理。另外對于緩存的處理,一般在基于單機版數據或者局域網API接口處理的字典綁定,速度是比較快的,基本上可以不用考慮緩存的處理,但是對于基于互聯網API接口的數據處理,往往受限于帶寬等原因,請求數據的速度沒有那么快,那么需要做好數據緩存處理,才可能更好的提高用戶體驗。
對于普通的下拉列表控件,我們綁定操作就是先獲取字典數據列表,然后對它的數據項進行添加操作即可,為了方便,我們往往做成一個擴展函數的方式來進行處理,并把這些通用的擴展函數放到界面基類庫里面方便重用,這樣我們可以在設計到界面的數據綁定的時候,非常方便的調用了。
如類似下面的擴展函數定義。
/// <summary> /// 綁定下拉列表控件為指定的數據字典列表 /// </summary> /// <param name="combo">下拉列表控件</param> /// <param name="itemList">數據字典列表</param> /// <param name="defaultValue">控件默認值</param> /// <param name="emptyFlag">是否加入空值選項</param> public static void BindDictItems(this ComboBoxEdit combo, List<string> itemList, string defaultValue, bool emptyFlag = true) { combo.Properties.BeginUpdate();//可以加快 combo.Properties.Items.Clear(); combo.Properties.Items.AddRange(itemList); if (emptyFlag) { combo.Properties.Items.Insert(0, ""); } if (itemList.Count > 0) { combo.SetDropDownValue(defaultValue); } combo.Properties.EndUpdate();//可以加快 }
還有有時候我們需要一個顯示文本、值的鍵值對來對字典進行處理,如定義的CListItem對象:
/// <summary> /// 框架用來記錄字典鍵值的類,用于Comobox等控件對象的值傳遞 /// </summary> [Serializable] public class CListItem { /// <summary> /// 顯示內容 /// </summary> public string Text { get; set; } /// <summary> /// 實際值內容 /// </summary> public string Value { get; set; } }
這樣我們綁定列表的擴展函數在定義一個函數,如下所示。
/// <summary> /// 綁定下拉列表控件為指定的數據字典列表 /// </summary> /// <param name="combo">下拉列表控件</param> /// <param name="itemList">數據字典列表</param> /// <param name="defaultValue">控件默認值</param> /// <param name="emptyFlag">是否加入空值選項</param> public static void BindDictItems(this ComboBoxEdit combo, List<CListItem> itemList, string defaultValue, bool emptyFlag = true) { combo.Properties.BeginUpdate();//可以加快 combo.Properties.Items.Clear(); combo.Properties.Items.AddRange(itemList); if (emptyFlag) { combo.Properties.Items.Insert(0, new CListItem("")); } if (itemList.Count > 0) { if (!string.IsNullOrEmpty(defaultValue)) { combo.SetComboBoxItem(defaultValue); } else { combo.SelectedIndex = 0; } } combo.Properties.EndUpdate();//可以加快 }
當然,除了上面的這兩個處理,我們還可以定義很多不同類型的重載方法,以便更方便處理相關的控件的字典數據綁定。
對于固定數據源List<string>、或者List<CListItem>來說,我們綁定的操作就非常簡單。
List<CListItem> itemList= new List<CListItem>() { new CListItem("有"), new CListItem("無") }; txtItem.BindDictItems(itemList);
然后獲取對應字典值的方式,我們可以定義一個擴展函數來處理,如下代碼所示。
/// <summary> /// 獲取下拉列表的值 /// </summary> /// <param name="combo">下拉列表</param> /// <returns></returns> public static string GetComboBoxValue(this ComboBoxEdit combo) { CListItem item = combo.SelectedItem as CListItem; if (item != null) { return item.Value; } else { return ""; } }
對于以上的操作,我們這里還沒有涉及到字典模塊里面的數據源,只是提供一些常規的固定列表,我們知道,大多數的數據字典我們是通過字典模塊來進行維護的。
因此我們也需要動態的從字典庫上獲取對應的字典集合來進行綁定。字典的數據,我們可以通過字典類型或者字典代碼來獲取,如下是通過字典類型獲取對應的字典列表代碼。
BLLFactory<DictData>.Instance.GetDictByDictType(dictTypeName);
有了這些數據的獲取方法,我們就可以通過擴展函數來進一步擴展我們綁定字典類別的方式了,如下擴展函數所示。
/// <summary> /// 綁定下拉列表控件為指定的數據字典列表 /// </summary> /// <param name="combo">下拉列表控件</param> /// <param name="dictTypeName">數據字典類型名稱</param> /// <param name="defaultValue">控件默認值</param> public static void BindDictItems(this ComboBoxEdit combo, string dictTypeName, string defaultValue) { Dictionary<string, string> dict = BLLFactory<DictData>.Instance.GetDictByDictType(dictTypeName); List<CListItem> itemList = new List<CListItem>(); foreach (string key in dict.Keys) { itemList.Add(new CListItem(key, dict[key])); } BindDictItems(combo, itemList, defaultValue); }
使用的時候,就非常簡單了,如下代碼是實際項目中對字典列表綁定的操作,字典數據在字典模塊里面統一定義的。
/// <summary> /// 初始化數據字典 /// </summary> private void InitDictItem() { txtInDiagnosis.BindDictItems("入院診斷"); txtLeaveDiagnosis.BindDictItems("最后診斷"); //初始化代碼 this.txtFollowType.BindDictItems("隨訪方式"); this.txtFollowStatus.BindDictItems("隨訪狀態"); }
這樣就非常簡化了我們對字典數據源的綁定操作了,非常方便易讀,下面是其中一個功能界面的下拉列表展示。
DevExpress WinForm擁有180+組件和UI庫,能為Windows Forms平臺創建具有影響力的業務解決方案。DevExpress WinForms能完美構建流暢、美觀且易于使用的應用程序,無論是Office風格的界面,還是分析處理大批量的業務數據,它都能輕松勝任!
本文轉載自:
DevExpress技術交流群6:600715373 歡迎一起進群討論
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: