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

📄 treeview.~cpp

📁 全面剖析人力资源管理的内容
💻 ~CPP
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "treeview.h"
#include "counter.cpp"
#include "editdb.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfmTreeView *fmTreeView;
extern int TableExist(AnsiString szDatabase, AnsiString szTable);
//---------------------------------------------------------------------------
__fastcall TfmTreeView::TfmTreeView(TComponent* Owner,AnsiString szParaTableName,AnsiString szParaCodeTable,AnsiString szParaFieldName,int nParaBits,bool bParaEdit,TObject* pParaObj)
    : TForm(Owner)
{
    szTableName=szParaTableName;
    szCodeTable=szParaCodeTable;
    szFieldName=szParaFieldName;
    pSortEdit =  (TEdit*)pParaObj;
    nBits=nParaBits;
    fmTreeView->Caption=szParaCodeTable;
    bEdit=bParaEdit;
    Label4->Caption="编码位数:"+IntToStr(nBits)+"      ";
    for(int i=0;i<TreeView1->Items->Count;i++)
    {
        if(TreeView1->Items->Item[i]->Data)
            delete (TList*)(TreeView1->Items->Item[i]->Data);
    }
    while(TreeView1->Items->Count>0)
    {
        TreeView1->Items->Item[0]->DeleteChildren();
        TreeView1->Items->Item[0]->Delete();
    }

    if(!TableExist("db", szCodeTable))
    {
        Query1->SQL->Clear();
        Query1->SQL->Add("CREATE TABLE [dbo].["+szCodeTable+"] (");
        Query1->SQL->Add("	[内部编号] [int] IDENTITY(1,1) NOT NULL ,");
        Query1->SQL->Add("	[类别] [varchar] (100) NULL ,");
        Query1->SQL->Add("	[AbsIndex] [int] NULL ,");
        Query1->SQL->Add("	[ItemIndex] [int] NULL ,");
        Query1->SQL->Add("	[ItemLevel] [int] NULL ,");
        Query1->SQL->Add("	[ParentIndex] [int] NULL ,");
        Query1->SQL->Add("	[类别号] [char] (10) NULL ,");
        Query1->SQL->Add("	[单位编号] [char] (10) NULL ");
        Query1->SQL->Add(") ON [PRIMARY]");
//        Query1->SQL->Add("GO");
        Query1->ExecSQL();
    }

    Query1->SQL->Clear();
    Query1->SQL->Add("select * from "+szCodeTable+" order by absIndex");
    Query1->Open();
    Query1->First();
    while(!Query1->Eof)
    {
        AnsiString szCode = Query1->FieldByName("类别号")->AsString;
        AnsiString szCode1 = Query1->FieldByName("单位编号")->AsString;
        AnsiString szName = Query1->FieldByName("类别")->AsString;
        int ItemLevel = Query1->FieldByName("ItemLevel")->AsInteger;
        int ParentIndex = Query1->FieldByName("ParentIndex")->AsInteger;
        if(ItemLevel==0)
        {
            TEdit* edCode=new TEdit(this);
            TEdit* edCode1=new TEdit(this);
            edCode->Text=szCode;
            edCode1->Text=szCode1;
            TList* MyList ;
            MyList = new TList ;
            MyList->Add(edCode) ;
            MyList->Add(edCode1) ;
            TreeView1->Items->AddObject(NULL,szName,MyList);
        }
        else
        {
            TTreeNode* pNode = TreeView1->Items->Item[ParentIndex];
            TEdit* edCode=new TEdit(this);
            TEdit* edCode1=new TEdit(this);
            edCode->Text=szCode;
            edCode1->Text=szCode1;
            TList* MyList ;
            MyList = new TList ;
            MyList->Add(edCode) ;
            MyList->Add(edCode1) ;
            TreeView1->Items->AddChildObject(pNode,szName,MyList);
        }
        Query1->Next();
    }

    if(bParaEdit)
    {
        btOK->Visible=false;
        btAddEql->Visible=true;
        btAddSub->Visible=true;
        btSave->Visible=true;
        btAddBas->Visible=true;
        btMod->Visible=true;
        btDel->Visible=true;
        Edit4->ReadOnly = false;
        Edit5->ReadOnly = false;
    }
    else
    {
        btOK->Visible=true;
        btAddEql->Visible=false;
        btAddSub->Visible=false;
        btSave->Visible=false;
        btAddBas->Visible=false;
        btMod->Visible=false;
        btDel->Visible=false;
        Edit4->ReadOnly = true;
        Edit5->ReadOnly = true;
    }
}
//---------------------------------------------------------------------------
void __fastcall TfmTreeView::btSaveClick(TObject *Sender)
{
    Query1->SQL->Clear();
    Query1->SQL->Add("begin tran");
    Query1->ExecSQL();
    try{
        /*
            Query1->SQL->Clear();
            Query1->SQL->Add("delete from tvtemp");
            Query1->ExecSQL();

            Query1->SQL->Clear();
            Query1->SQL->Add("insert into tvtemp select 单位编号, xx from "+szCodeTable);
            Query1->ExecSQL();
        */
            Query1->SQL->Clear();
            Query1->SQL->Add("delete from "+szCodeTable);
            Query1->ExecSQL();
            for(int i=0;i<TreeView1->Items->Count;i++)
            {
                AnsiString sql="insert into "+szCodeTable+"(类别,单位名称, AbsIndex, ItemIndex, ItemLevel, ParentIndex, 类别号, 单位编号) values('";
                sql += TreeView1->Items->Item[i]->Text;
                sql += "','";
                sql += TreeView1->Items->Item[i]->Text;
                sql += "',";
                sql += IntToStr(i);
                sql += ",";
                sql += IntToStr(TreeView1->Items->Item[i]->Index);
                sql += ",";
                sql += IntToStr(TreeView1->Items->Item[i]->Level);
                sql += ",";
                if(TreeView1->Items->Item[i]->Level>0)
                    sql += IntToStr(TreeView1->Items->Item[i]->Parent->AbsoluteIndex);
                else
                    sql +="-1";
                sql += ",'";
                sql += ((TEdit*)((TList*)(TreeView1->Items->Item[i]->Data))->Items[0])->Text.Trim() + "','";
                sql += ((TEdit*)((TList*)(TreeView1->Items->Item[i]->Data))->Items[1])->Text.Trim()  ;
                sql += "')";
                Query1->SQL->Clear();
                Query1->SQL->Add(sql);
                Query1->ExecSQL();
            }
        Query1->SQL->Clear();
        Query1->SQL->Add("commit");
        Query1->ExecSQL();
       /*
        Query1->SQL->Clear();
        Query1->SQL->Add("update szCodeTable set xx=a.xx from tvtemp as a where a.单位编号=" + szCodeTable + ".单位编号");
        Query1->ExecSQL();

        Query1->SQL->Clear();
        Query1->SQL->Add( "update szCodeTable set xx='A' where xx is null" ) ;
        Query1->ExecSQL();
        
        */
    }
    catch(...)
    {
        Application->MessageBox("保存失败,编码重复或位数超长。","提示",MB_YESNO) ;
        Query1->SQL->Clear();
        Query1->SQL->Add("rollback");
        Query1->ExecSQL();
    }
}
//---------------------------------------------------------------------------
void __fastcall TfmTreeView::TreeView1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
    try{
        TTreeNode* pNode = TreeView1->Selected;
//        TTreeNode* pNode=TreeView1->GetNodeAt(X,Y);
        
        if(!pNode)
            return;
        TEdit* edCode=new TEdit(this);
        edCode=((TEdit*)((TList*)(pNode->Data))->Items[0]) ;
        Edit4->Text=edCode->Text;
        Edit5->Text=pNode->Text;

        AnsiString szbh = edCode->Text.Trim();
        while(pNode->Parent)
        {
            pNode=pNode->Parent;
            edCode=((TEdit*)((TList*)(pNode->Data))->Items[0]) ;
            szbh=edCode->Text.Trim()+szbh;
        }
        /*
        AnsiString sql;
        AnsiString szMaxbh;
        int Autobh;
        sql="select max("+szFieldName+") as 编号 from "+szTableName+" where "+szFieldName+" like '";
        sql += szbh;
        sql += "%'";
        Query1->SQL->Clear();
        Query1->SQL->Add(sql);
        Query1->Open();
        if(Query1->FieldByName("编号")->AsString.Length()>0)
        {
            szMaxbh = Query1->FieldByName("编号")->AsString;
            Autobh = StrToInt(szMaxbh.SubString(szbh.Length()+1,szMaxbh.Trim().Length()-szbh.Length()));
            szbh=szbh+(IntToStr(100000000+Autobh+1)).SubString(9-(nBits-szbh.Length())+1,nBits-szbh.Length());
            //按:需要自动计算的位数=编码位数-分类编码位数,用100000000+Autobh+1截取最后适当长度的几位。
        }
        else
            szbh=szbh+(IntToStr(100000000+1)).SubString(9-(nBits-szbh.Length())+1,nBits-szbh.Length());
        */
        Edit1->Text=szbh;
    }
    catch(...)
    {}
}
//---------------------------------------------------------------------------
void __fastcall TfmTreeView::btModClick(TObject *Sender)
{
    if(Edit4->Text.Trim().Length()==0||Edit4->Text.Trim().Length()==0)
        return;
    TTreeNode* pNode = TreeView1->Selected;
    pNode->Text=Edit5->Text;
    TEdit* edOldCode;
    TEdit* edNewCode = new TEdit(this);

⌨️ 快捷键说明

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