作为一个ERP数据处理框架,大部分的开发场景都差不多. 理想中,对于通用数据处理,我的步骤如下: 1.为窗体指定数据来源(数据表/查询等): 2.拖入编辑控件,指定绑定字段: 3.结束. 为此,我设计了几个基类窗体,给它们分成几个场景(如无数据/单表数据/主从表/多表关联等),在不同的业务模型下,我选取相应的基类窗体进行继承. 首先,看看最基础的基类窗体,它包含了基础的处理(诸如多语言加载.权限判断.状态刷新.自动数据绑定等基础方法和属性): /// <summary> /// 窗体基类 //…
最基础的窗体基类其实是通过应用场景反推的结构. 以下是场景一: 单表应用,普通的数据,比如单位/颜色/特殊字典等使用者少的,无需过多控制的可以使用一个数据表格来管理. 和Excel表格差不多,批量修改,统一保存. 这种设计时只需要变更Datagridview的数据列,并在代码中指定数据来源即可.看下代码: #region 数据目标定义 SaveTableName = "SYS_URightDef"; SaveTablePrimaryKey = "URDefRKEYIN&quo…
对于软件来说,启用自动更新是非常必要的. 根据软件的应用场景,我们可以设计不同的更新模型. 目前,IMES框架运行在.Net framework 4.0下面,使用的Win系统版本在Win7,域内管控,平时业务调整也不是很频繁. 所以,我的更新很粗放,就是删除旧文件,拷贝新文件: 1.更新文件放置在文件服务器一个公共目录下:\\SV001\Public\Update : 2.仅在用户登录时检测更新(或者在系统界面点击“更新”按钮手动更新): 3.根据业务变更可以指定更新某一个文件.一个文件夹.或者…
作为ERP等数据应用程序,数据库的处理是重中之重. 在框架中,我封装了一个数据库的基类,在每个模组启动或窗体启动过程中,实例化一个基类即可调用CRUD操作(create 添加read读取 update 修改delete删除),当然,还包括基础的SQL事务处理. 这个过程中,还考虑到对插件的管控,利用反射增加了调用授权,避免未经授权的程序盗用数据连接. 看看完整的代码: /// <summary> /// 数据库连接基类 /// </summary> public class DBC…
初学时,有了想法却完全不知道该从何下指,此序列将抛砖引玉,与大家共同学习进步. 一个程序的初始,必然是启动. 我的要求: 1.应用程序保持单例: 2.从配置文件加载一些基础数据进行初始化: 3.显示软件的LOGO页面: 4.判断应用程序是否有更新: 4.进入用户登录界面: 5.用户成功登录后显示主界面. 如上图,基本达成目标,这个项目也是很简单的结构: 看窗体名称就知道各自的用途了.主要的Program.cs代码如下: static class Program { public static b…
一直对商业控件不感冒, 结合日常工作, 我写了几个常用控件. 一.下拉框控件(仿Access下拉框:F4下拉,自动输入,支持单/多列显示),可在Datagridview中使用. 1.常规: 2.Datagridview: 二.带按钮的文本框(可在Datagridview中使用): 1.常规: 2.Datagridview 三.个性文本框(限制数字.文本等等,可以设置必输项和小提示): 四.Framework Ribbon功能区,就是一个切换页面了,仿Office的Ribbon(可折叠). 目前的…
Programmer普弱哥们都喜欢玩自己的框架,我也不例外. 理想中,这个框架要易于理解.易于扩展.易于维护:最重要的,易于CODING. 系统是1主体框架+N模组的多个EXE/DLL组成的,在主体框架打开的时候,编译完模块EXE可以马上响应需求,不用退系统,不用重登录. 大概的目标:来一个新功能需求,在框架中拷贝一个模板,修改一下定义,再挂接一下,就可以上线. 一.先看看VS的解决方案: * A10做为整体基石,维护通用的代码类库(如加解密/INI处理/XML/JSON/WEB调用等): *…
个别时候,我们需要一种多语种切换方案. 我的方案是这样的: 1.使用文本文本存储多语言元素,应用程序启动时加载到内存表中: 2.应用程序启动时从配置文件加载语种定义: 3.所有窗体继承自一个Base基类窗体,窗体加载时根据全局语种变量到内存表中加载多语言元素并赋值给有Text等文本属性的对象. 4.关于数据库字段的多语言显示,我目前是使用一个LL(本地)和一个LI(国际)字段共2个字段来记录2种语言数据,并在相关查询语句中根据全局语种变量加载. 这样,不管是软件页面元素,还是存储的数据,都能支持…
如果没有特别需求,和场景1一样只变更表名,主键字段,检测字段等名称,不需要写其它代码了. * 清单列表+单笔编辑/保存,适用于大多数基础资料管理以及简单的单据资料录入(当然,排版是要改一改的): * 目录树(也为列表+单笔记录变更模式):…
满足用户体验,在数据录入时,能在输入完一个信息后通过回车或Tab键自动的切换到下一个控件(字段). 在界面控件设计时,默认可以通过设置控件的TabIndex来实现.但在布局调整时或者是对输入的内容有选择性时,从用代码的方式来处理显得更好维护一点. 完整的实现方法如下: /// <summary> /// 回车.Tab键盘切换或执行操作 /// </summary> public sealed class TabEnter:IDisposable { private List<…