• winform快速开发平台 -> 快速绑定ComboBox数据控件


    通常我们在处理编辑窗体时。往往会遇到数据绑定。例如combobox控件绑定数据字典可能是我们经常用到的。然而在我的winform快速开发平台中我是如何处理这个频繁的操作呢?

    首先,我们要绑定combobox动态数据,大致都是来自于数据字典的数据绑定,那么思路来了,我们需要绑定的是通过获取字典属性来绑定ComboBox控件。大家都知道ComboBox控件中存在显示数据,和值数据对数据值进行绑定。

    那么此时我们需要定义一个实体类:

     1     /// <summary>
     2     /// ComboBoxModel数据绑定实体类
     3     /// </summary>
     4     public class BaseComboBoxModel
     5     { /// <summary>
     6         /// 实体编号
     7         /// </summary>
     8         public string Id { set; get; }
     9         /// <summary>
    10         /// 树显示名称
    11         /// </summary>
    12         public string Name { set; get; }
    13     }

    这个类主要用于处理一个通用的数据集合。这样便于我们在后续处理中更加简洁和方便。

    对数操作的数据字典相信大家都有自己的通用的框架,EF,dapper,或其他的ORM 或自己的DBHelper.这些都无关紧要。重要的是我们通过这样的一个设计让我们的代码更加简洁。维护起来更加的方便。

    程序的出发点始终是能让初级程序员写出高级程序员代码质量作为目标。

    言归正传,对于编辑窗体,我们需要创建一个FormBaseEdit基窗体。由他来构造我们大多数的通用方法。我们在创建关于Edit窗体时进行对FormBaseEdit的继承。这样所有有关于Edit级别的操作都会继承过来。

    我们在FormBaseEdit窗体的操作方法

     1 /// <summary> 
     3 /// 绑定数据字典 
     5 /// </summary> 
     7 /// <param name="comboBox">绑定控件</param>
     9 /// <param name="key">数据字典编码</param> 
    11 public virtual void LoadComboBox(ComboBox comboBox, string key) 
    13 { 
    15     var list = _baseDataDictionaryDetailBll.GetDataDictionaryDetailListByCode(key) 
    17               .Select(p => new BaseComboBoxModel() 
    19               { 
    21                   Id = p.DataDictionaryId, 
    23                   Name = p.Name 
    25               }).ToList(); 
    27     list.Insert(0, new BaseComboBoxModel() { Id = string.Empty, Name = "请选择" }); 
    29     comboBox.DataSource = list; 
    31     comboBox.DisplayMember = "Name"; 
    33     comboBox.ValueMember = "Id"; 
    35 }

    这样一个通用的完善的ComboBox绑定控件就已经完成了。

    通过这样的构造我们在项目中在进行对数据字典的数据绑定就得心应手了。我们的小伙伴不需要关心如何绑定的数据。 只需要在自己的编辑窗体中进行一个数据配置就可以完成对数据操作。 代码同时也越发的简洁。

    下图看一下我们的使用:下图中简单的2句话就可以将数据字典的动态数据绑定到我们的控件中。用起来还是蛮方便的。

    通过如下方法我们也可以绑定一下常用的数据如城市联动菜单:

    相同的思路:下面是构建的绑定TreeView的实体结构

     1 public class BaseTreeViewModel
     2 {
     3   /// <summary>
     4   /// 实体编号
     5   /// </summary>
     6   public string Id { set; get; }
     7   /// <summary>
     8   /// 树显示名称
     9   /// </summary>
    10   public string Name { set; get; }
    11   /// <summary>
    12   /// 父编号
    13   /// </summary>
    14   public string ParentId { set; get; }
    15 }
    16 
    17 public class BaseTreeViewMenuModel : BaseTreeViewModel
    18 {
    19   /// <summary>
    20   /// 分类
    21   /// </summary>
    22   public bool IsForm { set; get; }
    23 
    24   /// <summary>
    25   /// 命名空间
    26   /// </summary>
    27   public string Namespace { set; get; }
    28 
    29   /// <summary>
    30   /// 调用类 
    31   /// </summary>
    32   public string Class { set; get; }
    33 }

    Winform快速开发平台: 基础模块,代码抽象,通用代码、代码生成。 让程序员有相对较多的时间去专注于业务,摆脱重复性的工作,以及量级别的工作。通过有效的代码生成,尽可能的减少程序员编写的无用功代码! 每天进步一点点。

    希望大家提供宝贵意见!非常感谢!

    Winform快速开发平台系列:

    官网连接

    1.winform快速开发平台 -> 让有限的资源创造无限的价值!

    2.winform快速开发平台 -> 基础组件之分页控件

    3.winform快速开发平台 -> 绑定ComboBox数据控件

    4.winform快速开发平台 -> 工作流组件(仿GooFlow)

    5.winform快速开发平台 -> 通用权限管理之动态菜单

  • 相关阅读:
    大端与小端编号方法的区别
    socket、listen 等函数的打电话隐喻
    windows 网络编程报错 error LNK2019
    有符号数与无符号数之间的转换
    C++ 代码命名建议
    编写启发式代码的方法
    求给定数目的前 n 个素数
    不使用 “+” 实现加法操作
    二叉搜索树中两个节点的旋转
    Python玩转硬件:TPYBoard-Micropython开发板大盘点
  • 原文地址:https://www.cnblogs.com/liuyunsheng/p/4863808.html
Copyright © 2020-2023  润新知