⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ufrmcqgpshighergroup.pas

📁 msc map program to control client of tools,use for map guide
💻 PAS
字号:
//==============================================================================
// $修订版本号: 1.0 $
// $日期      : 2007年7月20日 星期五 11:15:00 $
// $版本号    : 1.0.0 Alpha 1 $
//
// 上下组别功能实现。
//
// $BeginLog$
// $Endlog  $
// $Copyright 版权所有 (c)2006 TRANSIT  保留所有权利$
//==============================================================================
{: 实现说明:
  多选参考字段数据过滤事件:
    1. 新建记录:
      上级用户组仅保留与登录用户组相同的用户组。
      下级用户组全部过滤。
    2. 编辑记录:
      上级用户组当编辑的记录如果是自身记录时过滤;
      否则按单位等级编号选择大于等于登录用户的单位等级编号的组
      下级用户组按单位等级编号比选择小于等于登录用户的单位等级编号的组
}


unit ufrmCQGPSHigherGroup;

interface

uses
  Windows, DB, Classes, SysUtils, 
  cxTextEdit, cxControls, cxContainer, cxEdit, cxLabel, ExtCtrls, RzPanel,
  StdCtrls, cxButtons, Controls, ComCtrls, TbListView, dxDockPanel,
  dxDockControl, 
  uBaseDBForm, uBaseDBDefs,  cxLookAndFeelPainters, uBaseDBUtils,
  cxMemo, ImgList, dxNavBarCollns, dxNavBarBase, dxNavBar, ufrmBaseDBPurview,
  uBaseSystemNavForm, uBaseDBFormInfor, Menus;
type

  TfrmCQGPSHigherGroup = class(TBaseDBForm)
    dxDockSite1: TdxDockSite;
    dxLayoutDockSite1: TdxLayoutDockSite;
    dxDockPanel1: TdxDockPanel;
    lvOilType: TTbListView;
    Panel1: TPanel;
    dxDockSite2: TdxDockSite;
    dxDockPanel3: TdxDockPanel;
    dxLayoutDockSite3: TdxLayoutDockSite;
    gbPlan: TRzGroupBox;
    Name: TcxTextEdit;
    cxLabel4: TcxLabel;
    cxLabel1: TcxLabel;
    HigherGroupNO: TcxTextEdit;
    btnRefresh: TcxButton;
    btnEdit: TcxButton;
    btnDelete: TcxButton;
    btnAdd: TcxButton;
    ilSmall: TImageList;
    ilLarge: TImageList;
    procedure FormCreate(Sender: TObject);
  private
    procedure doOnChildDataListFilterEvent(_sender: TObject; _master_id: Integer;
      _child_table_detail_id: Integer; var _is_filter: Boolean);

    function  extractLevelNOFromGroupID(_data_list: TList; _group_id: Integer;
      var _level_no: Integer): Boolean;
  public
    GroupID : Integer;
  end;

implementation

uses Variants, ufrmCQGPSGroup, ufrmCQGPSGroupEdit;

{$R *.dfm}

{ TfrmProtectSecurityUser }

procedure TfrmCQGPSHigherGroup.doOnChildDataListFilterEvent(
  _sender: TObject; _master_id, _child_table_detail_id: Integer;
  var _is_filter: Boolean);
var
  group_level_no_parent   : Integer;
  group_level_no_child    : Integer;
  logon_group_id          : Integer;
  base_db_form            : TfrmCQGPSGroup;
  p_field_info            : PBaseDBFieldInfo;
  is_new                  : Boolean;
  group_id                : Integer;
  data_value_list         : TList;
begin
   // 编辑窗口过滤 取得编辑窗口的当前状态
  if TComponent(_sender).Owner is TfrmCQGPSGroupEdit then
  begin
    logon_group_id := BaseDBGlobal.UserGroupIDByName(AppName);
    // 获取编辑窗口的编辑状态
    is_new := TfrmCQGPSGroupEdit(TComponent(_sender).Owner).IsNew;
    // 获取字段值列表
    data_value_list := TBaseDBUtility.ExtractFieldValueFromDataListByID(FDataList,
                       _child_table_detail_id);

    base_db_form := TfrmCQGPSGroup(TComponent(_sender).Owner.Owner);

    p_field_info := TBaseDBUtility.FindFieldByName('GroupRelationshipParent',
                                                      base_db_form.FieldList);

    group_id := TBaseDBUtility.ExtractRecordID(data_value_list);

    // 新建  (均不可以编辑组的相关信息)
    if is_new then
    begin
      if p_field_info^.ChildForm = Self then
      begin
        if group_id = logon_group_id then
          _is_filter := False
        else
          _is_filter := True;
      end
      else
        _is_filter := True;
    end
    // 编辑  (依照上下级关系进行过滤)
    else begin
      if not extractLevelNOFromGroupID(base_db_form.DataList, _master_id, group_level_no_parent) then
        Exit;

      if not extractLevelNOFromGroupID(base_db_form.DataList, _child_table_detail_id, group_level_no_child) then
        Exit;

      // 上级组 
      if p_field_info^.ChildForm = Self then
      begin
        if (group_id = logon_group_id) and (_master_id = _child_table_detail_id) then
          _is_filter := True
        else
          _is_filter := group_level_no_parent <= group_level_no_child;
      end
      //下级组
      else begin
        _is_filter := group_level_no_parent >= group_level_no_child;
      end;
    end;
  end;
end;

function TfrmCQGPSHigherGroup.extractLevelNOFromGroupID(_data_list: TList;
  _group_id: Integer; var _level_no: Integer): Boolean;
var
  field_value_list : TList;
  value_var        : Variant;
begin
  // 初始化返回值
  Result := False;

  field_value_list := TBaseDBUtility.ExtractFieldValueFromDataListByID(_data_list, _group_id);

  if not Assigned(field_value_list) then
    Exit;

  value_var := TBaseDBUtility.ExtractValueByFieldName('LevelNO', field_value_list);

  if VarIsNull(value_var) then
    Exit;

  _level_no := value_var;

  Result := True;
end;

procedure TfrmCQGPSHigherGroup.FormCreate(Sender: TObject);
begin
  OnChildDataListFilterEvent := doOnChildDataListFilterEvent;

  DBListView      := lvOilType;
  ButtonNew       := btnAdd;
  ButtonEdit      := btnEdit;
  ButtonDelete    := btnDelete;
  ButtonRefresh   := btnRefresh;

  DBTableName     := 'MSC_Group';
  DBTableCHNName  := '层级管理';
  SelectSQL := 'Select * from V_MSC_GroupLevelInfo';

  AddField('ID', '编号', 50, ftInteger, False, False, True);
  AddField('Name', '名称', 150, ftString, False, True);
  AddField('LevelNO', '单位等级', 100, ftInteger);
  AddField('LevelName', '单位等级名称', 100, ftString);

  InitialInfo;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -