📄 usergroup.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "UserGroup.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "fpanel"
#pragma link "RecBaseForm"
#pragma link "SDEdit"
#pragma resource "*.dfm"
#define ParaCode "10101" //分类码各层字符长度参数代码头
TfrmUserGroup *frmUserGroup;
//---------------------------------------------------------------------------
extern AnsiString SDTrim(AnsiString TrimString);
//---------------------------------------------------------------------------
AnsiString __fastcall TfrmUserGroup::GetFieldValue(int FieldIndex)
{
WideString S;
S = ReadFieldValue(comServer,FieldIndex);
return(S);
}
//---------------------------------------------------------------------------
void __fastcall TfrmUserGroup::ClearControl(bool BringToNext)
{
if(BringToNext)
return;
lblUpperCode->Caption="";
seUserGroupItem->Text = "";
seUserGroupName->Text = "";
seUserGroupDesc->Text = "";
}
//---------------------------------------------------------------------------
void __fastcall TfrmUserGroup::GetDataFromComObject()
{
AnsiString strLevel;
strLevel=GetFieldValue(fiUserGroupLevel);
if (TierLen[strLevel.ToInt()] <= 0)
seUserGroupItem->MaxLength=18;
else
seUserGroupItem->MaxLength=TierLen[strLevel.ToInt()];
lblUpperCode->Caption = GetFieldValue(fiUserGroupUpperCode);
seUserGroupItem->Text = GetFieldValue(fiUserGroupItem);
seUserGroupName->Text = GetFieldValue(fiUserGroupName);
seUserGroupDesc->Text = GetFieldValue(fiUserGroupDesc);
}
//---------------------------------------------------------------------------
void __fastcall TfrmUserGroup::SendDataToComObject()
{
AnsiString strLevel;
AnsiString strErr,strTemp;
if(CurrentState == caAddDetail)
strLevel=IntToStr(tvUserGroup->Selected->Level+1);
if(CurrentState == caEditDetail)
strLevel=IntToStr(tvUserGroup->Selected->Level);
if (TierLen[strLevel.ToInt()] <= 0)
{
throw Exception("本级编码长度参数无效!");
}
strTemp=Trim(seUserGroupItem->Text);
if (strTemp.Length() != TierLen[strLevel.ToInt()])
{
strErr="本级编码长度必须为"+AnsiString(TierLen[strLevel.ToInt()]);
throw Exception(strErr.c_str());
}
WriteFieldValue(comServer,fiUserGroupUpperCode,lblUpperCode->Caption);
WriteFieldValue(comServer,fiUserGroupItem,strTemp); // UserGroupItem
WriteFieldValue(comServer,fiUserGroupName,seUserGroupName->Text); // UserGroupName
WriteFieldValue(comServer,fiUserGroupLevel,strLevel); // UserGroupName
WriteFieldValue(comServer,fiUserGroupDesc,seUserGroupDesc->Text); // UserGroupDesc
}
//---------------------------------------------------------------------------
void __fastcall TfrmUserGroup::WaitUserInput()
{
if(CurrentState == caEditDetail && tvUserGroup->Selected->HasChildren)
{
seUserGroupItem->Enabled=false;
seUserGroupName->SetFocus();
}
else
seUserGroupItem->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TfrmUserGroup::RefreshGridData(int mAction)
{
AnsiString tempText;
if (mAction == 0)
{
if(tvUserGroup->Selected)
{
tempText = "(" + GetFieldValue(fiUserGroupCode) + ")" + GetFieldValue(fiUserGroupName);
tvUserGroup->Items->AddChild(tvUserGroup->Selected,tempText);
tvUserGroup->Selected->Expanded = true;
}
}
else if(mAction == 1)
{
if(tvUserGroup->Selected->HasChildren)
{ //如果有子节点,则刷新一次.
comServer->Query();
FillGridWithData();
}
else
{
tvUserGroup->Selected->Text = "(" + GetFieldValue(fiUserGroupCode) + ")"
+ GetFieldValue(fiUserGroupName);
}
}
else if(mAction == 2)
{
tvUserGroup->Items->Delete(tvUserGroup->Selected);
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmUserGroup::FillGridWithData()
{
AnsiString tempText;
TTreeNode* TempNode[7];
int mLevel;
TreeFresh=true; //更新分类码树,不执行Change事件
tvUserGroup->Items->Clear();
TreeFresh=false;
TempNode[0]=tvUserGroup->Items->Add(NULL,"所有的用户组");
comServer->MoveFirst();
while (comServer->Eof == 0)
{
if(GetFieldValue(fiUserGroupCode)=="001")//不显示系统管理员组
{
comServer->MoveNext();
continue;
}
mLevel = StrToInt(GetFieldValue(fiUserGroupLevel));
if( (mLevel <= 0) || (mLevel > 18))
{
::MessageBox(Handle,"用户组层级的级别必须在1和18之间","错误",MB_OK|MB_ICONSTOP);
comServer->MoveNext();
continue;
}
tempText = "(" + GetFieldValue(fiUserGroupCode) + ")" + GetFieldValue(fiUserGroupName);
TempNode[mLevel] = tvUserGroup->Items->AddChild(TempNode[mLevel-1],tempText);
comServer->MoveNext();
}
//展开所有的节点。
if (tvUserGroup->Items->Count > 0)
{
tvUserGroup->FullExpand();
comServer->MoveFirst();
GetDataFromComObject();
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmUserGroup::InitEditControl()
{
ClientGroup->AddComponent(2,false,false,true, FloatPanel1,FloatPanel1->Name);
ClientGroup->AddComponent(2,true,true,false,Panel1,Panel1->Name);
}
//---------------------------------------------------------------------------
void __fastcall TfrmUserGroup::TreeViewLocation()
{
AnsiString s,c;
s = GetFieldValue(fiUserGroupCode);
for(int i = 1 ; i < tvUserGroup->Items->Count ; i ++)
{
c = tvUserGroup->Items->Item[i]->Text; //取关键字
c = c.SubString(2,c.AnsiPos(")")-2);
if(s == c)
{
tvUserGroup->Selected = tvUserGroup->Items->Item[i];
break;
}
}
}
//---------------------------------------------------------------------------
__fastcall TfrmUserGroup::TfrmUserGroup(TComponent* Owner)
: TRecBaseForm(Owner,euSdUserGroup,"")
{
InitTierLen();
}
//---------------------------------------------------------------------------
void __fastcall TfrmUserGroup::FormShow(TObject *Sender)
{
FillGridWithData();
}
//---------------------------------------------------------------------------
void __fastcall TfrmUserGroup::tvUserGroupChange(TObject *Sender,
TTreeNode *Node)
{
AnsiString s;
if (TreeFresh)
return;
if(Node == tvUserGroup->Items->Item[0])
{
return;
}
s = Node->Text;
s = s.SubString(2,s.AnsiPos(")")-2);
comServer->LocateByKey(WideString(s));
if (comServer->Eof == 0)
{
GetDataFromComObject();
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmUserGroup::FormClose(TObject *Sender,
TCloseAction &Action)
{
TRecBaseForm::FormClose(Sender,Action);
}
//---------------------------------------------------------------------------
void __fastcall TfrmUserGroup::muAddDetailClick(TObject *Sender)
{
AnsiString s;
TRecBaseForm::muAddDetailClick(Sender);
if(tvUserGroup->Selected == NULL)
return;
int tempLevel = tvUserGroup->Selected->Level;
if(tempLevel == 0)
{
s = "";
lblUpperCode->Caption="";
}
else
{
s = tvUserGroup->Selected->Text;
s = s.SubString(2,s.AnsiPos(")")-2);
lblUpperCode->Caption = s;
}
if (TierLen[tempLevel+1] <= 0)
seUserGroupItem->MaxLength=18;
else
seUserGroupItem->MaxLength=TierLen[tempLevel+1];
}
//---------------------------------------------------------------------------
void __fastcall TfrmUserGroup::muEditDetailClick(TObject *Sender)
{
AnsiString s;
if(tvUserGroup->Selected == NULL)
return;
if(tvUserGroup->Selected->Level == 0)
{
return;
}
TRecBaseForm::muEditDetailClick(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TfrmUserGroup::muDeleteDetailClick(TObject *Sender)
{
if(tvUserGroup->Selected == NULL)
return;
if(tvUserGroup->Selected->Level == 0)
{
return;
}
if(tvUserGroup->Selected->HasChildren)
{
::MessageBox(Handle,"该用户组下包含有子用户组,\n操作被禁止。",
"错误", MB_OK|MB_ICONSTOP);
return;
}
TComResultSet *pResultSet=NewResultSet();
AnsiString strSQL,s;
s = tvUserGroup->Selected->Text;
s = s.SubString(2,s.AnsiPos(")")-2);
strSQL=" select UserCode from sdUser where UserGroup='"+s+"'";
try
{
pResultSet->Open(strSQL,"");
pResultSet->MoveFirst();
if(pResultSet->RecordCount > 0)
{
::MessageBox(Handle,"该用户组中包含用户,\n操作被禁止。",
"错误", MB_OK|MB_ICONSTOP);
pResultSet->Close();
return;
}
pResultSet->Close();
TRecBaseForm::muDeleteDetailClick(Sender);
if (tvUserGroup->Items->Count == 1)
{
ClearControl(false);
}
}
__finally
{
delete pResultSet;
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmUserGroup::muFirstClick(TObject *Sender)
{
TRecBaseForm::muFirstClick(Sender);
TreeViewLocation();
}
//---------------------------------------------------------------------------
void __fastcall TfrmUserGroup::muPreviousClick(TObject *Sender)
{
TRecBaseForm::muPreviousClick(Sender);
TreeViewLocation();
}
//---------------------------------------------------------------------------
void __fastcall TfrmUserGroup::muNextClick(TObject *Sender)
{
TRecBaseForm::muNextClick(Sender);
TreeViewLocation();
}
//---------------------------------------------------------------------------
void __fastcall TfrmUserGroup::muLastClick(TObject *Sender)
{
TRecBaseForm::muLastClick(Sender);
TreeViewLocation();
}
//---------------------------------------------------------------------------
int __fastcall TfrmUserGroup::GetTierLen(int tiernum)
{
if ((tiernum>0)&&(tiernum<19)) //层数从1-18为有效
return TierLen[tiernum];
else
return 0;
}
//---------------------------------------------------------------------------
void __fastcall TfrmUserGroup::InitTierLen()
{
TComResultSet *pResultSet=NewResultSet();
AnsiString strSQL,strItem,strValue;
strSQL=" select parameteritem,parametervalue from sdparameter ";
strSQL=strSQL+" where parametertype = 2 and parametercode like '"+ParaCode+"%'";
try
{
pResultSet->Close();
pResultSet->Open(WideString(strSQL),WideString(""));
//clear the TierLen Array
for(int i=0;i<10;i++)
TierLen[i]=0;
pResultSet->MoveFirst();
while(!pResultSet->Eof)
{
strItem=pResultSet->FieldByName("parameteritem");
strValue=pResultSet->FieldByName("parametervalue");
if ((strItem.ToIntDef(0) != 0)&&(strValue.ToIntDef(0) != 0))
if ((strItem.ToInt()>0) && (strItem.ToInt()<20))
TierLen[strItem.ToInt()]=strValue.ToInt();
pResultSet->MoveNext();
}
}
__finally
{
delete pResultSet;
}
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -