zoukankan      html  css  js  c++  java
  • [K/3Cloud] 理解BOS关于Enabled属性的表决器原理

    通常的编程中,我们习惯:

     btnOK.Enabled = true;

    这个样子就会将按钮变成有效,反之亦然。但在ERP的表单中,其某个按钮或字段其有效性及其复杂,例如一个表格中某个数量单元格其有效性是这么写的:

     this.View.GetEditor("FAmount",1).Enabled = 物料填了吗 && 单据是可编辑 && 单据非只读打开 && 有权限编辑 && 有此字段编辑权限;

    当然,实际情况会更复杂,而我们在编写插件时,可能把他变无效很容易,但要变成有效就麻烦了,你必须枚举所有的情况,糟糕的往往我们会漏掉一些判断,更加糟糕的是这种BUG你很难察觉。

    · BOS的方案


    为解决这个问题,在BOS的新设计中,我们使用表决器的概念,一个控件其Enabled可以受很多的表决器影响,当如何一个表决器投反对票后,其控件就无效了,同理,所有的投票器均不反对,控件才会有效。

    下面的代码演示了将某个字段的某行,加入一个表决器,并表决结果。

     base.View.GetFieldEditor(key, row).GetStyle<EnableStyle>().GetOrAddItem("LockFieldService").Value = isShowOrEnable;

    其中,base.View.GetFieldEditor(key, row)是获取控件对象。
    GetStyle<EnableStyle>()是获取其Enabled的表决器对象。
    GetOrAddItem("LockFieldService")是获取或创建一个表决器,其"LockFieldService"就是你的表决器名称,不同的表决器使用不同的名称以便区隔。
    .Value就是设置你的表决器当前的值。
    记得,当你这样设置其为True时,并不代表控件一定会变的有效,他还受此控件的其他表决器、此控件关联的字段、关联的行、字段关联的实体、整个表单和元数据等等一堆的因素决定。

  • 相关阅读:
    SQLHELPER C#
    SQL存储过程实例
    gridview css 样式及分页
    触发器
    MSsql存储过程
    解决在pc上用apk downloader插件下载谷歌play商店android应用出现的ssl错误
    VBScript输出显示双引号
    asp课堂更改读写权限值的实现
    1421. Credit Operations 夜
    sdut 1944 Flash Mob 夜
  • 原文地址:https://www.cnblogs.com/fyq891014/p/4188830.html
Copyright © 2011-2022 走看看