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

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

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

     /// <summary>
/// ComboBoxModel数据绑定实体类
/// </summary>
public class BaseComboBoxModel
{ /// <summary>
/// 实体编号
/// </summary>
public string Id { set; get; }
/// <summary>
/// 树显示名称
/// </summary>
public string Name { set; get; }
}

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

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

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

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

我们在FormBaseEdit窗体的操作方法

 /// <summary>
/// 绑定数据字典
/// </summary>
/// <param name="comboBox">绑定控件</param>
/// <param name="key">数据字典编码</param>
public virtual void LoadComboBox(ComboBox comboBox, string key)
{
var list = _baseDataDictionaryDetailBll.GetDataDictionaryDetailListByCode(key)
.Select(p => new BaseComboBoxModel()
{
Id = p.DataDictionaryId,
Name = p.Name
}).ToList();
list.Insert(, new BaseComboBoxModel() { Id = string.Empty, Name = "请选择" });
comboBox.DataSource = list;
comboBox.DisplayMember = "Name";
comboBox.ValueMember = "Id";
}

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

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

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

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

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

 public class BaseTreeViewModel
{
  /// <summary>
  /// 实体编号
  /// </summary>
  public string Id { set; get; }
  /// <summary>
  /// 树显示名称
  /// </summary>
  public string Name { set; get; }
  /// <summary>
  /// 父编号
  /// </summary>
  public string ParentId { set; get; }
} public class BaseTreeViewMenuModel : BaseTreeViewModel
{
  /// <summary>
  /// 分类
  /// </summary>
  public bool IsForm { set; get; }   /// <summary>
  /// 命名空间
  /// </summary>
  public string Namespace { set; get; }   /// <summary>
  /// 调用类
  /// </summary>
  public string Class { set; get; }
}

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

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

Winform快速开发平台系列:

官网连接

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

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

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

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

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

winform快速开发平台 -> 快速绑定ComboBox数据控件的更多相关文章

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

    一个项目控件主要由及部分的常用组件,当然本次介绍的是通用分页控件. 处理思想:我们在处理分页过程中主要是针对数据库操作. 一般情况主要是传递一些开始位置,当前页数,和数据总页数以及相关关联的业务逻辑. ...

  2. C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 数据权限增强、范围权限增强

    并不是不想做B\S的管理工具,只是精力实在不够,由于用户权限管理组件是基础组件.所以C\S的也无妨,不会有几个人在乎Oracle,SQLServer是否不b\s的,注重的是功能性能,请大家不要纠结与是 ...

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

    最近一直在维护一套自己的快速开发平台. 主要应对针对C/S架构下的项目.然而对winform这快,还真没有看到过相对好的快速开发平台, 何为快速,在博客园逛了了好久, 预览了很多通用权限管理系统. 确 ...

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

    这几个月一直忙APP的项目,没来得及更新项目,想想该抽出时间整理一下开发思路,跟大家分享,同时也希望得到宝贵的建议. 先说一下我们的权限管理的的设计思路,首先一个企业信息化管理系统一定会用到权限管理, ...

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

    对于web方向的工作流,一直在用gooflow对于目前我的winform开发平台却没有较好的工作流组件.  针对目前的项目经验告诉我们.一个工作流控件是很必要的. 当然在winform方面的工作流第三 ...

  6. vivo浏览器的快速开发平台实践-总览篇

    一.什么是快速开发平台 快速开发平台,顾名思义就是可以使得开发更为快速的开发平台,是提高团队开发效率的生产力工具.近一两年,国内很多公司越来越注重研发效能的度量和提升,基于软件开发的特点,覆盖管理和优 ...

  7. SNF快速开发平台MVC-各种级联绑定方式,演示样例程序(包含表单和表格控件)

    做了这么多项目,经常会使用到级联.联动的情况. 如:省.市.县.区.一级分类.二级分类.三级分类.仓库.货位. 方式:有表单需要做级联的,还是表格行上需要做级联操作的. 实现:实现方法也有很多种方式. ...

  8. SNF开发平台WinForm之十五-时间轴控件使用-SNF快速开发平台3.3-Spring.Net.Framework

    一.显示效果如下: 二.在控件库里选择UCTimeAxis 拖拽到窗体里. 三.加入以下代码,在load事件里进行调用就可以运行了. #region 给时间轴控件加载数据 private void U ...

  9. SNF开发平台WinForm之十-Excel导入-SNF快速开发平台3.3-Spring.Net.Framework

    7.1运行效果: 2.Excel导入开发实现 2.1. 创建窗体,修改命名空间 新增的窗体命名“FrmImport表名”,这个导入窗口比较其它窗口会特殊一些,需要继承BaseFormImport父级窗 ...

随机推荐

  1. Nginx中root与alias的用法及区别:

    Nginx中root与alias都是定义location {}块中虚拟目录访问的文件位置: 先看看两者在用法上的区别: location /img/ { alias /var/www/image/; ...

  2. 条件编译#if

    1.为什么需要条件编译 客户的需求在不停地发生变化,一会儿需要这个功能,一会儿不需要这个功能.我们可以使用条件编译来方便地裁剪功能. 2.条件编译语句#if 条件编译语句#if的形式是 #if exp ...

  3. Node.js API 初解读(一)

    Node.JS API 初解读 Version: NodeJs v6.2.0 一. Assert 1.简介 Assert模块主要用于断言.如果表达式不符合预期,就抛出一个错误. 该模块用于编写程序的单 ...

  4. 参加SFDC的感触

    今天参加了SFDC. 第一次参加这样的技术大会,感触总是有点. 简单的记录如下 1.自动化运维在行业已经成为趋势,未来DevOps 作为开发和运维统一已经是新时代对开发人员的要求.公司架构一个自己的自 ...

  5. 现代软件工程作业 github使用

    Github使用 版本库的创建与同步 第一步:创建远程版本库并同步到本地 创建远程版本库 在地址栏输入www.github.com 并sign in 进入到个人主页,如下图示: 创建远程版本库:点击N ...

  6. Java 多线程编程

    1.synchronized/wait/notify package javamultithread; import java.util.logging.Level; import java.util ...

  7. Python学习笔记—Python基础1 介绍、发展史、安装、基本语法

    第一周学习笔记: 一.Python介绍      1.Python的创始人为吉多·范罗苏姆.1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言 ...

  8. struts2使用annotation注意事项

    struts2使用annotation注意事项 1.包名只能以.action .actions  .struts  .struts2结尾.如:com.cnbolgs.web.actions 2.类名只 ...

  9. android Viewpager HorizontalScrollView 实现分页栏拖拽

    源码:http://files.cnblogs.com/android100/ViewPaperDemo.rar首先我们先看一个效果:  前两个是网易的,它做的title不能拖拽,.不过点击动画效果挺 ...

  10. Sicily 1444: Prime Path(BFS)

    题意为给出两个四位素数A.B,每次只能对A的某一位数字进行修改,使它成为另一个四位的素数,问最少经过多少操作,能使A变到B.可以直接进行BFS搜索 #include<bits/stdc++.h& ...