ImageVerifierCode 换一换
格式:DOCX , 页数:6 ,大小:91.92KB ,
资源ID:2401602      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2401602.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(信息系统开发平台OpenExpressApp支持勾选视图.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

信息系统开发平台OpenExpressApp支持勾选视图.docx

1、信息系统开发平台OpenExpressApp支持勾选视图信息系统开发平台OpenExpressApp支持勾选视图在OpenExpressApp中部门岗位角色,功能权限属于角色的,所以功能权限也放在部门模块中设置了,后期将会单独对权限部门进行介绍,本篇讲解一下在功能权限实现中使用到的一种新的内置视图样式,我把它叫做勾选视图。之前的列表视图OEA的所有Command都有一个Guid,角色下功能权限下存储的实际上是不能使用的功能的Guid,如果按照以往来实现,界面如下:界面左边为模块,右边为分组的对象功能列表,这时可以通过设计一个【选择】功能,弹出一个对话框,对话框显示所有模块的所有对象功能列表,然

2、后通过选择后加入细表。虽然这样可以很方便的使用以前框架的功能来实现,但是用户使用起来会很不方便。这种方式,勾选一个功能需要需要点击弹出对话框,然后选择一些内容,然后关闭。而系统模块功能可能很多,这样操作就会让用户点击按钮多次。新增的勾选视图勾选视图界面显示如上图所示,右边把原来弹出的对话框内容显示在这里,前面加了一个checkbox框提供选择,通过勾选操作来实现以往的选择功能。现在用户新增或者去除一个功能,只需要勾选一次就可以解决,而以往操作需要3个步骤。之前项目任务中就遇到过类似操作,当时就想实现一个通用视图来提高易用性,不过由于时间原因没有做,直到今天才完成。下面介绍一下勾选视图的主要实现

3、和使用。为了下面讲解时对数据说明清楚,定义一下两个术语:源数据:勾选的列表,相当于以前弹出选择框的数据 目的数据:操作的对象列表,通过勾选操作影响到的实际对象实现要求1. 由于这只是操作样式不一样,所以我不希望在以前的业务对象类库里加入这部分功能,这部分功能与类库隔离开来2. 把这个功能抽象为一中通用的样式视图,通过一些属性设置和约定来实现3. 延用以前框架代码,在之前框架代码上扩展框架内部实现 UI勾选列表是一个列表视图,所以可以重用以前的ListObjectView,只是需要增加一个checkbox列。现在实现为通过附加属性来实现 public static readonly Depend

4、encyProperty IsCheckedProperty = DependencyProperty.RegisterAttached(IsChecked, typeof(bool), typeof(SelectedDataAttached), new FrameworkPropertyMetadata(new PropertyChangedCallback(OnIsCheckedChanged); / / Handles changes to the IsChecked property. / private static void OnIsCheckedChanged(Dependenc

5、yObject d, DependencyPropertyChangedEventArgs e) if (d is DataGrid) DataGrid grid = d as DataGrid; if (bool)e.NewValue) DataGridCheckBoxColumn column = new DataGridCheckBoxColumn() Header = 选择 ; column.Binding = new Binding(PropertyConvention.IsSelected); grid.Columns.Insert(0, column); else if (gri

6、d.Columns0 is DataGridCheckBoxColumn) & (string)grid.Columns0.Header = 选择) grid.Columns.RemoveAt(0); 数据以前UI显示的数据是父对象的子对象列表属性(目的数据),现在需要显示为源数据,则需要修改LoadData, / / 装载数据,考虑(AssociationOperateType.Selected / public override void LoadData() base.LoadData(); if (AllowLoadData) & (AssociationOperateType.Sel

7、ected = BOsPropInfo.AssociationAttribute.AssociationOperateType) LateBoundObject obj = new LateBoundObject(_data); Data = obj.CallMethod(MethodConvention.GetList_Selected); _destData = this.Parent.CurrentObject.GetPropertyValue(PropertyName); (Control as UIElement).SetValue(SelectedDataAttached.Dest

8、DataProperty, _destData); 对于通过本地导航获取数据的,需要修改FilterData / / 导航过滤数据 / / public void FilterData(IQueryObject queryObject) _data = this.Parent.CurrentObject.GetPropertyValue(PropertyName); LateBoundObject obj = new LateBoundObject(_data); if (AssociationOperateType.Self = BOsPropInfo.AssociationAttribut

9、e.AssociationOperateType) Data = obj.CallMethod(MethodConvention.GetList, queryObject); else Data = obj.CallMethod(MethodConvention.GetList_Selected, queryObject); _destData = obj.CallMethod(MethodConvention.GetList, queryObject); (Control as UIElement).SetValue(SelectedDataAttached.DestDataProperty

10、, _destData); 操作勾选时需要触发增加或者删除目的数据对象,通过在给View的Data赋值时遍历源数据每条记录的INotifyPropertyChanged事件来处理 foreach (var srcItem in srcData) /属性更改触发新增删除对象 (srcItem as INotifyPropertyChanged).PropertyChanged += delegate(object sender, PropertyChangedEventArgs pe) if (pe.PropertyName.ToLower() = PropertyConvention.IsSe

11、lected.ToLower() bool isSelected = (bool)sender.GetPropertyValue(PropertyConvention.IsSelected); if (view.BOsPropInfo.AssociationAttribute.IsForwardSelected) /正向 if (isSelected) AddObject(sender, destData, view); else DeleteObject(sender, destData, view); else /反向 if (isSelected) DeleteObject(sender

12、, destData, view); else AddObject(sender, destData, view); ; 外部开发使用 设置Association属性 private static PropertyInfo OrgPositionOperationsProperty =RegisterProperty(new PropertyInfo(OrgPositionOperations); Association(AssociationOperateType = AssociationOperateType.Selected, IsForwardSelected =false, Sel

13、ectedPropertyMap = BusinessObjectId;OperationId) public OrgPositionOperations OrgPositionOperations get if (!FieldManager.FieldExists(OrgPositionOperationsProperty) LoadProperty(OrgPositionOperationsProperty, OrgPositionOperations.NewChild(); return GetProperty(OrgPositionOperationsProperty); 在Assoc

14、iation属性中设置三个属性:1. AssociationOperateType = AssociationOperateType.Selected关联操作类型,设置为Selected表示使用勾选视图,如果你把值设置为Self,或者不设置此值,那么显示结果就切换到最上面那个图了2. IsForwardSelected =false决定勾选check值触发添加记录还是删除记录,如果为true,表示正向操作,勾选时则新增对象,去除勾选时则删除对象,如果为false,则相反3. SelectedPropertyMap = BusinessObjectId;OperationId在勾选操作导致新增对象时,需要给新增对象的一些属性赋值,这些属性值来源于选择列表对象的属性,通过这个属性来映射。格式为:列表属性1=子对象属性1;列表属性2=子对象属性2,如果没有号,表示两个属性名称相同 实现选择适配类选择类如下,同以往业务类类似,属性比以往弹出选择列表对象类相似,唯一差别就是增加了一个IsSelected属性,参考代码如下: public partial class BoInfoOperationSelectedList : GBusinessListBaseBoInf

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1