DevExpress控件使用交流,DevExpress中国社区Dev联系电话 联系电话:023-68661681

WinForm应用实战开发指南 - 下拉列表绑定 & 界面显示速度提升(一)

来源:   发布时间:2022-05-27   浏览:1506次

在我们开发WinForm界面的时候,往往需要绑定数据字典操作,也就是绑定一些下拉列表或者一些列表显示等,以便我们方便选择数据操作,常见的字典绑定操作就是对下拉列表的处理,本文是基于DevExpress界面的一些处理操作,原理也适用于常规Winform界面或者DotNetBar控件界面处理。另外对于缓存的处理,一般在基于单机版数据或者局域网API接口处理的字典绑定,速度是比较快的,基本上可以不用考虑缓存的处理,但是对于基于互联网API接口的数据处理,往往受限于带宽等原因,请求数据的速度没有那么快,那么需要做好数据缓存处理,才可能更好的提高用户体验。

点击获取DevExpress Winformv21.2正式版

常规字典列表的绑定

对于普通的下拉列表控件,我们绑定操作就是先获取字典数据列表,然后对它的数据项进行添加操作即可,为了方便,我们往往做成一个扩展函数的方式来进行处理,并把这些通用的扩展函数放到界面基类库里面方便重用,这样我们可以在设计到界面的数据绑定的时候,非常方便的调用了。

如类似下面的扩展函数定义。

/// <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 "";
}
}

对于以上的操作,我们这里还没有涉及到字典模块里面的数据源,只是提供一些常规的固定列表,我们知道,大多数的数据字典我们是通过字典模块来进行维护的。

WinForm应用实战开发指南 - 下拉列表绑定 & 界面显示速度提升

因此我们也需要动态的从字典库上获取对应的字典集合来进行绑定。字典的数据,我们可以通过字典类型或者字典代码来获取,如下是通过字典类型获取对应的字典列表代码。

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("随访状态");
}

这样就非常简化了我们对字典数据源的绑定操作了,非常方便易读,下面是其中一个功能界面的下拉列表展示。

WinForm应用实战开发指南 - 下拉列表绑定 & 界面显示速度提升

DevExpress WinForm | 下载试用

DevExpress WinForm拥有180+组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!

本文转载自:博客园 - 伍华聪


DevExpress技术交流群6:600715373      欢迎一起进群讨论

更多DevExpress线上公开课、中文教程资讯请上中文网获取

DevExpress企业定制服务
本站文章除注明转载外,均为本站原创或翻译
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果
转载请注明:文章转载自:DevExpress控件中文网 [https://www.devexpresscn.com/]
本文地址:https://www.devexpresscn.com/post/3079.html

相关产品: DevExpress Universal Subscription,

在线
客服
微信
QQ 电话
023-68661681
返回
顶部