CodeFishKeyPoints
1. 存储过程的大面积使用
在开始那个版本里面对于一些更新,比如entity名称更新导致的property和utility的前缀的更新的问题,都是从数据库中将数据取出来然后用代码更新,实际上是可以在存储过程里面更新的,用几个临时表和游标就行了,这样做方便了很多。还有就是关于2维关系的relation表的使用,也就是两个表存在多对多关系的时候,需要用一个relation表来记录,以及相关的级联删除的使用。
2. 关于两个listbox配合两个button的组合选择框的使用
这个东西属于批量修改,也就是在右侧选中框里面的东西首先要从数据库中delete然后再整体添加。Listbox本身不是容器,它只能做到显示,前端绑定displaymember,后端有valuemember,实际上容器本身是dataset, 这里面要用到两个dataset的row的交换问题,比如从unselect一侧移动到select一侧,需要相应的把unselectdataset的row移动到selectdataset一侧,这样需要一个tmprow做介质传递,是一个object数组。
3. menuitem的动态绑定
实现<最近打开的项目>这个功能需要动态的绑定menuitem到一个已经存在的menuitem上。
4. 窗体内部分割,实现横向移动
方法: 首先放入左侧的panel,dock设置为left,加入spliter,dock设置为left,加入右侧的panel,doc设置为fill即可。注意顺序,还有就是不简单的设置控件的dock属性,一定要放入pannel!!
5. 关于一个windowsform的构架
首先代码要分割成如下构架
#region 默认代码
#region 私有成员
#endregion
#region 构造函数
#endregion
#region 其他
#endregion
#endregion
#region 功能函数
#endregion
#region 窗体事件
#endregion
私有成员声明所有的变量,注意要分清windows控件的声明和私有数据类型(简单数据类型或者实体类)的声明,注意要有一个formtype来确定该窗体是用来add还是用来update。构造函数要相当有技巧,要有效的区别add或者是update,这里统一用实体类的主键ID是否大于0来判断,注意,要初始化好实体类必要的一些信息,比如fatherID等等。其他部分放置windows窗体构架器等等。 功能函数部分必要的是ControlsInit也就是窗体初始化,根据formtype来初始化控件,注意在构造函数里面只是初始化数据,比如dataset等,不要对控件进行初始化。
6 关于项目的构架的一些理解
对于一个解决方案,一般分成4个项目,表现层项目,控制层项目,数据层项目,还有接口层项目。对于接口的应用非常重要,因为一般来说mainform里面会有很多的功能,而且一个功能要有很多的方式来实现,比如toolbar和button等,这时候加入接口层就有非常大的作用了。
7 变量命名的规定
对于一个cs文件里面声明的控件,首先缩写控件名,然后加上控件的作用名。对于声明的变量,首先要有New,然后加上类型比如DataSet,最后加上用途。如果是一个函数里面的临时变量,首先要有Tmp,然后加类型,最后加上用途。