📄 localdbtreeview.pas
字号:
unit LocalDbTreeView;
interface
uses
SysUtils, Classes, Controls, ComCtrls,DB,
ImgList,StrUtils,dialogs,adodb,classedit;
type
TLocalDbTreeView = class(TTreeView)
private
FClassCodeFieldName:string; //级别字段
//FClassCodeFieldName:string; //编码字段
FClassStep:integer;
FClassNameFieldName:string; //级别名称字段
FClassEndFieldName:string; //末级字段(boolean)
FLocalDataSet:TAdoQuery;
class_list:Tstringlist;
class_listcode:Tstringlist;
FTableName:string;
FSelectedDataSet:TAdoQuery;
FClassEndFieldValue:string; //末级字段value(boolean)
Fclasseditform:TClassEdit_form;
FOtherMarkValue:string;
FOtherMarkField:string;
FOtherMarkSign:string;
procedure setclasscode(value:string);
procedure setclassname(value:string);
procedure setclassstep(value:integer);
procedure setclassend(value:string);
procedure setclassendv(value:string);
procedure setdataset(Value:TAdoquery);
procedure setselecteddataset(Value:Tadoquery);
procedure settablename(value:string);
procedure setothermarkvalue(value:string);
procedure setothermarkField(value:string);
procedure setothermarkSign(value:string);
//procedure OnChange(Sender: TObject; Node: TTreeNode);
{ Private declarations }
protected
{ Protected declarations }
public
function GetSelectedClassCode:string;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure AddClass;
procedure EditClass;
procedure DeleteClass;
procedure ShowClassTree;
procedure ShowSelectDb;
{ Public declarations }
published
//property ClassFieldName:string read FClassCodeFieldName write setclass;
property ClassCodeFieldName:string read FClassCodeFieldName write setclasscode;
property ClassNameFieldName:string read FClassNameFieldName write setclassname;
property ClassEndFieldName:string read FClassEndFieldName write setclassend;
property ClassEndFieldValue:string read FClassEndFieldValue write setclassendv;
property ClassStep:integer read FClassStep write setclassstep;
property LocalDataSet:TAdoQuery read FLocalDataSet write setdataset;
property SelectedDataSet:Tadoquery read FSelectedDataSet write setselecteddataset;
property TableName:string read FTableName write settablename;
property OtherMarkValue:string read FOtherMarkValue write setothermarkvalue;
property OtherMarkField:string read FOtherMarkField write setothermarkfield;
property OtherMarkSign:string read FOtherMarkSign write setothermarksign;
{ Published declarations }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('DbAnyWhere', [TLocalDbTreeView]);
end;
constructor TLocalDbTreeView.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
class_list:=Tstringlist.Create;
class_listcode:=Tstringlist.Create;
self.HideSelection:=false;
self.ReadOnly:=true;
self.FClassStep:=4;
self.FClassEndFieldValue:='true';
Fclasseditform:=TClassEdit_form.Create(nil);
FOtherMarkValue:='';
FOtherMarkField:='';
FOtherMarkSign:='=';
end;
destructor TLocalDbTreeView.Destroy;
begin
inherited Destroy;
freeandnil(class_list);
freeandnil(class_listcode);
freeandnil(Fclasseditform);
end;
{procedure TLocalDbTreeView.setclass(value:string);
begin
FClassCodeFieldName:=value;
end; }
procedure TLocalDbTreeView.setclasscode(value:string);
begin
FClassCodeFieldName:=value;
end;
procedure TLocalDbTreeView.setclassname(value:string);
begin
FClassNameFieldName:=value;
end;
procedure TLocalDbTreeView.setclassstep(value:integer);
begin
FClassStep:=value;
end;
procedure TLocalDbTreeView.setclassendv(value:string);
begin
FClassEndFieldValue:=value;
end;
procedure TLocalDbTreeView.setclassend(value:string);
begin
FClassEndFieldName:=value;
end;
procedure TLocalDbTreeView.setdataset(Value:TADOQuery);
begin
FLocalDataSet:=value;
end;
procedure TLocalDbTreeView.setselecteddataset(Value:TADOQuery);
begin
FSelectedDataSet:=value;
end;
procedure TLocalDbTreeView.settablename(value:string);
begin
FTableName:=value;
end;
//其他区分标志,比如目录树所属部门等
procedure TLocalDbTreeView.setothermarkvalue(value:string);
begin
FOtherMarkValue:=value;
end;
procedure TLocalDbTreeView.setothermarkfield(value:string);
begin
FOtherMarkField:=value;
end;
procedure TLocalDbTreeView.setothermarksign(value:string);
begin
FOtherMarkSign:=value;
end;
procedure TLocalDbTreeView.AddClass;
var
max_code:string;
new_code:string;
temp_str:string;
classname:string;
//classcode:string;
begin
fclasseditform.Label1.Caption:='所属栏目名称';
fclasseditform.Label2.Caption:='新建栏目名称';
if self.Items.Count>0 then
fclasseditform.Edit1.Text:=self.Selected.Text
else
fclasseditform.Edit1.Text:='增加栏目头';
fclasseditform.Edit2.Text:='';
fclasseditform.ShowModal;
if fclasseditform.IfEdit then
begin
classname:=fclasseditform.Edit2.Text;
//classcode:=fclasseditform.Edit3.Text;
end else exit;
//判断
if length(trim(classname))=0 then
begin
showmessage('名称不能够为空!');
exit;
end;
{if length(trim(classcode))=0 then
begin
showmessage('编码不能够为空!');
exit;
end; }
//开始没有任何栏目的时候呢?
if FClassEndFieldValue='1' then temp_str:='0';
if FClassEndFieldValue='true' then temp_str:='false';
//判断有无被选中的
if self.Items.Count=0 then
begin
new_code:=stringofchar('0',self.FClassStep-1)+'1';
self.FLocalDataSet.Close;
self.FLocalDataSet.SQL.Text:='insert into '+FTableName+'('+FClassCodeFieldName+','+
FClassEndFieldName+','+FClassNameFieldName+') values('+
''''+new_code+''','+
temp_str+','+
''''+classname+''')';
self.FLocalDataSet.ExecSQL;
if length(trim(classname))>0 then
begin
self.Items.AddChild(self.Selected,classname);
self.Items[0].ImageIndex:=0;
self.Items[0].SelectedIndex:=0;
self.Focused;
self.Repaint;
end;
//维护class_listcode列表
class_listcode.Add(new_code);
class_listcode.Sort;
exit;
end;
if self.Selected.HasChildren then
begin
max_code:=rightstr(class_listcode.strings[self.Selected.GetLastChild.AbsoluteIndex],4);
new_code:=class_listcode.strings[self.Selected.AbsoluteIndex]+
stringofchar('0',self.FClassStep-length(inttostr(strtoint(max_code)+1)))+
inttostr(strtoint(max_code)+1);
//存在下级都可以增加
self.FLocalDataSet.Close;
self.FLocalDataSet.SQL.Text:='insert into '+FTableName+'('+FClassCodeFieldName+','+
FClassEndFieldName+','+FClassNameFieldName+') values('+
''''+new_code+''','+
temp_str+','+
''''+classname+''')';
self.FLocalDataSet.ExecSQL;
if length(trim(classname))>0 then
begin
self.Items[self.Selected.AbsoluteIndex].ImageIndex:=1;
self.Items[self.Selected.AbsoluteIndex].SelectedIndex:=1;
self.Items.AddChild(self.Selected,classname);
self.Items[self.Selected.GetLastChild.AbsoluteIndex].ImageIndex:=2;
self.Items[self.Selected.GetLastChild.AbsoluteIndex].SelectedIndex:=3;
end;
//维护class_listcode列表
class_listcode.Add(new_code);
class_listcode.Sort;
end else
begin
new_code:=class_listcode.strings[self.Selected.AbsoluteIndex]+stringofchar('0',FClassStep-1)+'1';
//判断非末级类别的增加有无详细信息,有则不允许增加
self.FLocalDataSet.Close;
self.FLocalDataSet.SQL.Text:='select * from '+FTableName+' where left('+FClassCodeFieldName+','+
inttostr(length(class_listcode.Strings[self.Selected.AbsoluteIndex]))+
')='''+class_listcode.Strings[self.Selected.AbsoluteIndex]+''''+
' and '+FClassEndFieldName+'='+FClassEndFieldValue;
self.FLocalDataSet.Open;
if self.FLocalDataSet.RecordCount=0 then
begin
self.FLocalDataSet.Close;
self.FLocalDataSet.SQL.Text:='insert into '+FTableName+'('+FClassCodeFieldName+','+
FClassEndFieldName+','+FClassNameFieldName+') values('+
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -