CSLA.Net学习(1)——第一个小程序
CSLA是什么东西啊!项目需要,需要学习一下!
目前应用CSLA主要是为了验证数据,数据库开发的需要,要把程序结构分分层:数据实体Models、通用数据库操作Helper、数据操作DAL、业务逻辑BIL、系统界面UI;
应用CSLA开发的第一个测试程序,Csla版本为4.3.10.0,好像和3.X版本的区别还是蛮大的:
运行结果:
首先需要CSLA的类库:Csla.dll,Csla.Windows.dll。
包括Drill类,DrillList类和窗体类From1。
Drill类:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.ComponentModel; 6 using System.Linq; 7 using Csla; 8 using Csla.Data; 9 using Csla.Security; 10 namespace Models 11 { 12 [Serializable] 13 public class Drill :BusinessBase<Drill> 14 { 15 #region Business Methods 16 17 private string aa; 18 private static PropertyInfo<int> HoleIDProperty = 19 RegisterProperty<int>(p => p.HoleID, "钻孔编号"); 20 public int HoleID 21 { 22 get { return GetProperty(HoleIDProperty); } 23 set { SetProperty(HoleIDProperty, value); } 24 } 25 26 private static PropertyInfo<int> LayerIDProperty = 27 RegisterProperty<int>(p => p.LayerID, "分层编号"); 28 public int LayerID 29 { 30 get { return GetProperty(LayerIDProperty); } 31 set { SetProperty(LayerIDProperty, value); } 32 } 33 34 35 private static PropertyInfo<double> TopHeightProperty = 36 RegisterProperty<double>(p => p.TopHeight, "顶板高度"); 37 public double TopHeight 38 { 39 get { return GetProperty(TopHeightProperty); } 40 set { SetProperty(TopHeightProperty, value); } 41 } 42 43 44 public override string ToString() 45 { 46 return HoleID.ToString(); 47 } 48 49 #endregion 50 51 #region Business Rules 52 53 protected override void AddBusinessRules() 54 { 55 base.AddBusinessRules(); 56 57 BusinessRules.AddRule(new Csla.Rules.CommonRules.MinValue<int>(HoleIDProperty, 1)); 58 //BusinessRules.AddRule(new Csla.Rules.CommonRules.MinValue<int>(LayerIDProperty, 0)); 59 BusinessRules.AddRule(new Csla.Rules.CommonRules.MinValue<double>(TopHeightProperty, 0)); 60 BusinessRules.AddRule(new Csla.Rules.CommonRules.RegExMatch(LayerIDProperty, "^[0-9]*[1-9][0-9]*$", "要求类型为整形")); 61 } 62 63 #endregion 64 65 #region Factory Methods 66 67 public static Drill NewOrder() 68 { 69 return DataPortal.Create<Drill>(); 70 //return new Drill(); 71 } 72 73 public static Drill GetOrder(int id) 74 { 75 return DataPortal.Fetch<Drill>(id); 76 } 77 78 public static void DeleteOrder(int id) 79 { 80 DataPortal.Delete<Drill>(id); 81 } 82 83 public Drill() 84 { 85 MarkAsChild(); 86 } 87 public Drill(int holeid ,int layerid):this() 88 { 89 using (BypassPropertyChecks) 90 { 91 this.HoleID = holeid; 92 this.LayerID = layerid; 93 } 94 } 95 #endregion 96 protected override void AcceptChangesComplete() 97 { 98 System.Diagnostics.Debug.WriteLine(string.Format("Acc: {0} ({1}, {2})", HoleID, CurrentEditLevel, CurrentEditLevelAdded)); 99 base.AcceptChangesComplete(); 100 } 101 102 protected override void UndoChangesComplete() 103 { 104 System.Diagnostics.Debug.WriteLine(string.Format("Und: {0} ({1}, {2})", HoleID, CurrentEditLevel, CurrentEditLevelAdded)); 105 base.UndoChangesComplete(); 106 } 107 108 protected override void CopyStateComplete() 109 { 110 System.Diagnostics.Debug.WriteLine(string.Format("Beg: {0} ({1}, {2})", HoleID, CurrentEditLevel, CurrentEditLevelAdded)); 111 base.CopyStateComplete(); 112 } 113 #region Data Access 114 115 public int CurrentEditLevel 116 { 117 get 118 { 119 return EditLevel; 120 } 121 } 122 123 public int CurrentEditLevelAdded 124 { 125 get 126 { 127 Csla.Core.IEditableBusinessObject ebo = (Csla.Core.IEditableBusinessObject)this; 128 return ebo.EditLevelAdded; 129 } 130 } 131 #endregion 132 } 133 }
DrillList类:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Csla; namespace Models {class DrillList :BusinessBindingListBase<DrillList, Drill>{} }
Form1窗体:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Models; namespace MineGeologyV10._1._0 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){DrillList list = new DrillList();list.Add(new Drill(1, 1));list.Add(new Drill(2, 2));list.Add(new Drill(3, 3));list.Add(new Drill(4, 4));list.BeginEdit();this.bindingSource1.DataSource = list;this.bindingSource1.ListChanged += new ListChangedEventHandler(bindingSource1_ListChanged);this.dataGridView1.DataSource = bindingSource1;}void bindingSource1_ListChanged(object sender, ListChangedEventArgs e){System.Diagnostics.Debug.WriteLine(string.Format("{0}: {1}, {2}", e.ListChangedType.ToString(), e.NewIndex, e.OldIndex));}private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e){}} }
这里发现一个问题:Csla实现数据datagridview中的验证,如果是数据类型错误,DataGridView会弹出错误对话框,这时单元格没有失去焦点,也就是说此时的验证是在UI层的,没有发生在BIL层,没有通过Csla来实现验证。而只有失去焦点,数据存入DrillList类对象时才进行业务逻辑的验证。所有我将DataGridView的Data_Error事件处理了一下,这样就不会弹出对话框了,只是让光标无法离开单元格。
原来我的单元格验证都是在DataGridView中进行的!这样的坏处是没有办法与界面分离。但是数据绑定的机制确实很复杂!!
接下来要和数据库结合起来开发!
转载于:https://www.cnblogs.com/yhlx125/archive/2012/05/08/2480972.html
CSLA.Net学习(1)——第一个小程序相关推荐
- 从0到一开发微信小程序(2)——开发第一个小程序
文章目录 其他相关文章 1.创建项目 2.小程序代码目录介绍 2.1.描述整体的app.* 2.2.描述各自页面的pages下面的目录 其他相关文章 从0到一开发微信小程序(1)--申请账号并安装开发 ...
- 【微信小程序控制硬件 第13篇】安信可B站直播学习总结,微信小程序MQTT远程控制ESP8266 NodeMCU,谈谈微信生态那些事;
[微信小程序控制硬件第1篇 ] 全网首发,借助 emq 消息服务器带你如何搭建微信小程序的mqtt服务器,轻松控制智能硬件! [微信小程序控制硬件第2篇 ] 开始微信小程序之旅,导入小程序Mqtt客户 ...
- 零基础学浙大翁恺C语言(1):Dev C++的安装与第一个小程序
零基础学C语言(1):Dev C++的安装与第一个小程序 在线C语言开发环境:https://clin.icourse163.org/ 本地安装Dev C++:https://sourceforge. ...
- 微信小程序开发(一):环境搭建和第一个小程序创建
0 概览: 简介:微信小程序是微信里面的app,16年推出 竞品: 支付宝小程序 ,钉钉,美团,头条,抖音qq小程序 优点:1,在微信里面自由分享,2,不用下载app, 3,能快速的开发,使用微信的a ...
- 微信小程序开发——第一个小程序
这几个月都在忙着准备考研都不怎么研究代码了,前几天老师安排要做毕业设计的开题报告,所以就稍微兼顾着学习了点微信小程序的开发.昨天看了一会官方给的开发文档就是实例少了点,不过有个demo可以抠代码.等考 ...
- 学习如何使用微信小程序的for和foreach循环遍历获得索引和数据
学习如何使用微信小程序的for和foreach循环遍历获得索引和数据 js文件中定义数组 第一种for循环方法 第二种for循环方法length 第三种forEach循环方法 js文件中定义数组 * ...
- c语言如何输入汉字_C语言入门的第一个小程序
大部分程序员入门的第一个小程序都是Hello World,还记得当时大一的时候,我室友还特意为了这个发了个说说,现在想起来好有意思,哈哈好了废话不多说,直接干. (PS:如果学过自动忽略) #incl ...
- 不用代码,10分钟打造属于自己的第一款小程序
扫码体验 早晨到公司的时候,手机上推送的小程序审核通过的消息,激动的下载了小程序的二维码,扫一扫即可在手机上打开上线的小程序,不枉费昨天晚上熬夜到凌晨,用免费平台测试的功夫 gh_098cec5701 ...
- 微信小程序零基础入门_第一章 小程序和开发者工具的介绍
第一章 小程序和开发者工具的基本介绍 1.1 小程序的开发工具 微信小程序的开发者需要先通过微信公众平台注册开发者账号.在微信公众平台网页中的账号分类->小程序中有着较为详细的注册介绍,可以较为 ...
- 【小程序】第一个小程序——创建小程序项目
目录 小程序简介 第一个小程序 安装开发者工具 创建小程序项目 小程序简介 1. 小程序与普通网页开发的区别 2. 体验小程序 可使用手机微信(6.7.2 及以上版本)扫码下方小程序码,体验小程序: ...
最新文章
- 支付接口教程,详解支付宝接口(二)
- MDT 2013 从入门到精通之SQL Computer Unattended Files
- 详解Python模块化编程-自定义函数
- 湖北大学 计算机考研,湖北大学考研难吗?一般要什么水平才可以进入?
- ‘entityManagerFactory‘ that could not be found
- System Center 2012各组件介绍
- vue图片滚动抽奖_Vue项目开发-仿蘑菇街电商APP
- 替换Ecshop系统中产品描述部分的图片的alt图片描述
- 使用 webSocket 连接菜鸟打印(并获取当前电脑连接的打印机信息)
- echarts地图设置label引导线
- 玲珑3D与几何画板的比较
- 如何在腾讯云搭建自己的网站
- Excel常用技巧(三)——函数
- 模拟电子技术(学习笔记 1)
- react的useMemo 和 vue3的computed
- 戴尔要求DEC雇员扔掉Mac
- VSSDK 系列 - 创建 灯泡提示 ,替换 单词
- 联想网上审批系统方案
- ITIL 4Foundation题目-6
- 了解TypeScript装饰器
热门文章
- 百度地图android wear,Android SDK | 百度地图API SDK
- video php上下切换,TP3.2实现上下篇切换
- 中间画一条短竖线_许愿孔明灯怎么画,简约好看的孔明灯简笔画教程
- mysql automatic_sp_privileges_mysql variable automatic_sp_privileges 疑问
- Starry Night [USACO]
- 微信小程序学习笔记(4)--------框架之逻辑层
- 启动vm虚拟机里的系统时,提示此主机支持 AMD-V,但 AMD-V 处于禁用状态。
- 【转载】SQL执行计划
- 安卓开发之Handler、HandlerThread学习篇
- 错误:由于系统启用了内核调试器,因此不可能进行调试解决方案