?? treeview.~cpp
字號(hào):
//---------------------------------------------------------------------------
#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="編碼位數(shù):"+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(" [內(nèi)部編號(hào)] [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(" [類別號(hào)] [char] (10) NULL ,");
Query1->SQL->Add(" [單位編號(hào)] [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("類別號(hào)")->AsString;
AnsiString szCode1 = Query1->FieldByName("單位編號(hào)")->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 單位編號(hào), 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, 類別號(hào), 單位編號(hào)) 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.單位編號(hào)=" + szCodeTable + ".單位編號(hào)");
Query1->ExecSQL();
Query1->SQL->Clear();
Query1->SQL->Add( "update szCodeTable set xx='A' where xx is null" ) ;
Query1->ExecSQL();
*/
}
catch(...)
{
Application->MessageBox("保存失敗,編碼重復(fù)或位數(shù)超長(zhǎng)。","提示",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 編號(hào) from "+szTableName+" where "+szFieldName+" like '";
sql += szbh;
sql += "%'";
Query1->SQL->Clear();
Query1->SQL->Add(sql);
Query1->Open();
if(Query1->FieldByName("編號(hào)")->AsString.Length()>0)
{
szMaxbh = Query1->FieldByName("編號(hào)")->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());
//按:需要自動(dòng)計(jì)算的位數(shù)=編碼位數(shù)-分類編碼位數(shù),用100000000+Autobh+1截取最后適當(dāng)長(zhǎng)度的幾位。
}
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);
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -