惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
M
MIT News - Artificial intelligence
D
Docker
S
SegmentFault 最新的问题
B
Blog
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
博客园 - 【当耐特】
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
腾讯CDC
阮一峰的网络日志
阮一峰的网络日志
U
Unit 42
C
Check Point Blog
GbyAI
GbyAI
美团技术团队
Recent Announcements
Recent Announcements
F
Fortinet All Blogs
量子位
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
G
Google Developers Blog

博客园 - 瑞德船长

Visual C#如何使用Active X组件 Ext.form.ComboBox setValue()初始值设定问题 Ext.tree.TreePanel 在IE下不正常加载 - 瑞德船长 - 博客园 Windows mobile 开发入门—控件开发(漂亮的进度条) Windows mobile 开发入门—GPS程序的开发 Windows mobile 开发入门—网络程序的开发 Windows mobile 开发入门—开发绚丽滑动效果 Windows mobile 开发入门—第一个程序"hello world",链接调试,模拟器的使用 Windows mobile 开发入门—环境搭建 短信PDU编码解码(转) 发布一个小工具:建立站点和域名绑定(附代码) 委托(delegate)的异步调用 实用JavaScript脚本代码大全 - 瑞德船长 - 博客园 动态创建DataGrid 列排序功能的实现 多表头 Active report-在Web 上使用 active report Mediar.framework--Search 功能 微软RC2CryptoServiceProvider 加密的疏忽 Mediar.Framework—业务的实现3 (控制UI控件的可视和可编辑属性、验证、以及一对一,一对多,多对多关系)
Mediar.Framework—业务的实现2(UI 与对象实体的通信)
瑞德船长 · 2006-09-27 · via 博客园 - 瑞德船长
  

 UI 与对象实体的通信

1 前面已经谈到UI通过对象属性的名称从对象中获取值,UI控件的值是在changed 事件后赋给对象。因为对象实体是已知的,UI控件的值对应的是对象的属性,所以根据对象中属性名称获取值是比较容易的。当然设置对象与获取对象的值,都在对象实体中有相应的方法。这个方法比较通用,现在有不少架构都这么写.下面两个方法都使用了反射对property进行读写.



2
新建,保存,刷新,取消

     在主窗口中应该可以看到 新建,保存,刷新,取消这几个BUTTONMediar.framework 把所有的对象看归纳成只有这几个操作,通过这几个操作来控制对象。这几个button的事件调用活动窗口中的相应方法,最后调用对应的对象中相关方法.

主窗体中   

所有的对象UI都继承一个基础窗体,下面的方法作为共用方法写在这个基础窗体中。mRootBizObject 为窗体中对应的对象实体。这里就讲的比较的粗枝大叶了,不然决对不是一个短短的文章可以写清楚的。

新建需要通过工厂中的 CreateBizObject方法,因为每个对象都需要包括一个工厂,就需要在新建的时候构造传入。对象新建可以在InitializeValues方法设对象default 值。

取消就把Original值覆盖到当前值.

 public void CancelEdit()

         
{

              CancelEditChildren();

              
if ((mIsDirty)) 

              
{

                   RestoreLastPersistedValues();

                   
this.OnBizObjectUpdatedEvent(new BizObjectUpdatedEventArgs(BizObjectUpdatedType.Changed));

              }


         }


 
protected override void RestoreLastPersistedValues()

        
{

            mDisplayID[AttributeValueVersion.Current] 
= mDisplayID[AttributeValueVersion.Original];

            mFirstName[AttributeValueVersion.Current] 
= mFirstName[AttributeValueVersion.Original];

            mLastName[AttributeValueVersion.Current] 
= mLastName[AttributeValueVersion.Original];

            mDescription[AttributeValueVersion.Current] 
= mDescription[AttributeValueVersion.Original];

            mCompanyName[AttributeValueVersion.Current] 
= mCompanyName[AttributeValueVersion.Original];

            mContactType[AttributeValueVersion.Current].UniqueID 
= mContactType[AttributeValueVersion.Original].UniqueID;

          
// mAddress[AttributeValueVersion.Current].UniqueID = mAddress[AttributeValueVersion.Original].UniqueID;

            mEmailAddress[AttributeValueVersion.Current] 
= mEmailAddress[AttributeValueVersion.Original];

            mWebSiteURL[AttributeValueVersion.Current] 
= mWebSiteURL[AttributeValueVersion.Original];

            mNotes[AttributeValueVersion.Current] 
= mNotes[AttributeValueVersion.Original];

 

            
base.RestoreLastPersistedValues();

        }


保存就把数据更新到数据库,然后再刷新当前的实体。也许有人要问:刚才保存的为什么要刷新呀?刷新目是把RecordVersion取出来,RecordVersiontimestamp类型,每更新一次数据库,该字段就是有一个新值。在更新数据库之前会和数据库中的值比较,这是防止两个人在同时修改一个对象时引发冲突。

Factory类中,就会调用数据层的更新方法。

 public void Update(ref DataSet ds, string AssemblyName)

        
{

            DataAccess da;

            da 
= GetDataAccess(AssemblyName);

            ds
= da.Update(ds,true);

        }

刷新就是从数据库重取数据,然后更新对象属性的值。