各位大虾:
一个treeview有两层节点,第一层是所有客户名称,第二层是每个客户的销售单,我想实现以下功能:当单击第一层客户名称时,显示客户的详细信息;单击第二层客户的销售单时,显示该客户该销售单所订购的产品信息。treeview的所有节点都是程序运行时创建的,以上功能的实现代码分别写在什么对象的什么事件中才能实现以上功能呢? 谢谢!
一个treeview有两层节点,第一层是所有客户名称,第二层是每个客户的销售单,我想实现以下功能:当单击第一层客户名称时,显示客户的详细信息;单击第二层客户的销售单时,显示该客户该销售单所订购的产品信息。treeview的所有节点都是程序运行时创建的,以上功能的实现代码分别写在什么对象的什么事件中才能实现以上功能呢? 谢谢!
if BESTreeView.Selected.HasChildren then //显示客户的详细信息處理過程
else 显示该客户该销售单所订购的产品信息; 可根據BESTreeView.Selected.Text值來判斷點擊的內容
然后加上相应的属性就行了
在运行创建的时候用AddChildObject
随后在onChange或者OnClick里面用
TMyNode(TreeView.Selected.Data).AnyProperty
AnyProperty就是你新建的类的属性了
interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ComCtrls, ToolWin, ExtCtrls, ImgList, DB, DBTables;type
TfrmDemoTree = class(TForm)
mmDemoTree: TMainMenu;
mmFile: TMenuItem;
mmFile_Exit: TMenuItem;
mmOperate: TMenuItem;
mmOperate_CnDB: TMenuItem;
mmFG_One: TMenuItem;
mmOperate_BuildTree: TMenuItem;
mmHelp: TMenuItem;
mmHelp_AboutThis: TMenuItem;
mmHelp_AboutWindows: TMenuItem;
toolbDemoTree: TToolBar;
toolbtnExit: TToolButton;
toolbtnFG_One: TToolButton;
toolbtnCnDB: TToolButton;
toolbtnBuildTree: TToolButton;
tvDemoTree: TTreeView;
spltDemoTree: TSplitter;
lvDemoTree: TListView;
imglstToolbtn: TImageList;
toolbtnDiscnDB: TToolButton;
mmOperate_DiscnDB: TMenuItem;
imglstTree: TImageList;
sbDemo: TStatusBar;
Query1: TQuery;
procedure FormShow(Sender: TObject);
procedure toolbtnCnDBClick(Sender: TObject);
procedure toolbtnDiscnDBClick(Sender: TObject);
procedure mmOperate_DiscnDBClick(Sender: TObject);
procedure mmOperate_CnDBClick(Sender: TObject);
procedure mmFile_ExitClick(Sender: TObject);
procedure toolbtnExitClick(Sender: TObject);
procedure tvDemoTreeClick(Sender: TObject);
procedure toolbtnBuildTreeClick(Sender: TObject);
procedure mmOperate_BuildTreeClick(Sender: TObject);
procedure tvDemoTreeMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure lvDemoTreeMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure toolbtnExitMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure toolbtnCnDBMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure toolbtnDiscnDBMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
procedure toolbtnBuildTreeMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
procedure toolbDemoTreeMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
procedure sbDemoMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations } mem_strDBName: string; //用于存放数据库名 //连接数据库
procedure ConnectDB(); //断开数据库连接
procedure DisConnectDb(); //通用的执行SQL语句函数
procedure ExecQry(mSQL:string;mQry:tquery;mIsSelect:Boolean); //初始化树
procedure InitTree(); //用递归生成树
procedure BuildTree(mP_TreeNode:TTreeNode;mPid:integer); //初始化ListView列表
procedure InitListView();
public
{ Public declarations }
end;
var
frmDemoTree: TfrmDemoTree; //模块外部接口函数
procedure Show_DemoTreeFrm();implementationuses DemoTreeCodeDM;procedure Show_DemoTreeFrm();
var
iResult:Integer;
begin frmDemoTree := TfrmDemoTree.Create(Application);
try iResult := frmDemoTree.ShowModal;
if iResult = mrok then
begin
//处理
end
else
begin
//处理
end;
finally
frmDemoTree.Release;
end;
end;{$R *.dfm}procedure TfrmDemoTree.ConnectDB;
begin
//判定数据模块是否已经存在,
sbDemo.SimpleText := ' 正在连接数据库,请稍候...... ';
if not Assigned(dmDemoTree) then
dmDemoTree := TdmDemoTree.create(Application);
// showmessage(BoolToStr(dmDemoTree.dbDBETree.Connected));
if dmDemoTree.dbDBETree.connected = false then
begin
//连接数据库
try
with dmDemoTree.dbDBETree do
begin
DatabaseName := name;
Params.Clear;
Params.Add('USER NAME=Test');
Params.Add('PASSWORD=');
AliasName := 'MyTest';
LoginPrompt := false;
Connected := true; //连接
mem_strDBName := AliasName;
toolbtnBuildTree.Enabled := true;
toolbtnDiscnDB.Enabled := true;
mmOperate_BuildTree.Enabled := true;
mmOperate_DiscnDB.Enabled := true;
end;
Except
on Exception do //错误处理
begin
ShowMessage('连接数据库失败,请检查网络是否通路!');
end;
end;
end;
sbDemo.SimpleText := ' ';
end;procedure TfrmDemoTree.DisConnectDb;
begin
mem_strDBName := ''; //清空数据库名及一些环境设置
toolbtnBuildTree.Enabled := false;
toolbtnDiscnDB.Enabled := false;
mmOperate_BuildTree.Enabled := false;
mmOperate_DiscnDB.Enabled := false;
dmDemoTree.dbDBETree.Connected := false;
end;procedure TfrmDemoTree.ExecQry(mSQL: string; mQry: tquery; mIsSelect: Boolean);
begin
//执行SQL语句
mQry.Close;
mQry.SQL.Clear;
mQry.SQL.Add(mSQL);
mQry.DatabaseName := mem_strDBName;
if mIsSelect then
mQry.Open
else
mQry.ExecSQL;
end;procedure TfrmDemoTree.FormShow(Sender: TObject);
//初始化环境设置
begin
toolbtnBuildTree.Enabled := False;
mmOperate_BuildTree.Enabled := False;
toolbtnDiscnDB.Enabled := false;
mmOperate_DiscnDB.Enabled := false;
end;procedure TfrmDemoTree.toolbtnCnDBClick(Sender: TObject);
begin
ConnectDB;
end;
begin
DisConnectDb;
//清空树、ListViwe
if tvDemoTree.Items.Count <> 0 then
tvDemoTree.Items.Clear;
if lvDemoTree.Items.Count <> 0 then
lvDemoTree.Items.Clear;
end;procedure TfrmDemoTree.mmOperate_DiscnDBClick(Sender: TObject);
begin
DisConnectDb;
//清空树、ListViwe
if tvDemoTree.Items.Count <> 0 then
tvDemoTree.Items.Clear;
if lvDemoTree.Items.Count <> 0 then
lvDemoTree.Items.Clear;
end;procedure TfrmDemoTree.mmOperate_CnDBClick(Sender: TObject);
begin
ConnectDB;
end;procedure TfrmDemoTree.BuildTree(mP_TreeNode: TTreeNode; mPid: integer);
//用递归一次性生成所有树节点
var
idTemp:integer;
strSQL:string;
qryTemp:TQuery;
TrNodeTemp:TTreeNode;
begin
TrNodeTemp := mP_TreeNode;
qryTemp := TQuery.Create(self);
try
strSQL := ' select id,name '
+ ' from Tcity '
+ ' where Parentid='+inttostr(mpid);
ExecQry(strSQL,qryTemp,true);
while not qryTemp.Eof do
begin
idTemp := qryTemp.fieldbyname('id').AsInteger;
tvDemoTree.Selected := tvDemoTree.Items.AddChild(TrNodeTemp,qryTemp.fieldbyname('name').AsString);
BuildTree(tvDemoTree.Selected,idTemp);
qryTemp.Next;
end;
finally
qryTemp.Free; //释放资源
end;
end;procedure TfrmDemoTree.InitListView;
//初始化ListView
var
name,strSQL:string;
lvItem:TListItem;
Tempqry:TQuery;
begin
Tempqry := TQuery.Create(self);
try
lvDemoTree.Items.Clear; //清空
name := tvDemoTree.Selected.Text;
strSQL := ' select id '
+ ' from Tcity '
+ ' where name='''+name+'''';
ExecQry(strSQL,dmDemoTree.qryLV,true);
if not dmDemoTree.qryLV.Eof then
begin
strSQL := ' select * '
+ ' from Tcity where parentid='
+ inttostr(dmDemoTree.qryLV.fieldbyname('id').asinteger);
ExecQry(strSQL,dmDemoTree.qryLV,true);
while not dmDemoTree.qryLV.Eof do
begin
lvItem := lvDemoTree.Items.Add;
lvItem.Caption := inttostr(dmDemoTree.qryLV.fieldbyname('id').AsInteger);
lvItem.SubItems.Add(dmDemoTree.qryLV.fieldbyname('name').AsString);
strSQL := ' select name '
+ ' from Tcity '
+ ' where id='
+ inttostr(dmDemoTree.qryLV.fieldbyname('parentid').AsInteger);
ExecQry(strSQL,Tempqry,true);
lvItem.SubItems.Add(Tempqry.fieldbyname('name').AsString);
dmDemoTree.qryLV.Next;
end;
end;
finally
Tempqry.Free;
end;
end;procedure TfrmDemoTree.InitTree;
begin
tvDemoTree.Items.BeginUpdate;
tvDemoTree.Items.Clear;
BuildTree(nil,0);
tvDemoTree.Items.EndUpdate;
end;procedure TfrmDemoTree.mmFile_ExitClick(Sender: TObject);
begin
close;
end;procedure TfrmDemoTree.toolbtnExitClick(Sender: TObject);
begin
close;
end;procedure TfrmDemoTree.tvDemoTreeClick(Sender: TObject);
begin
if tvDemoTree.Items.Count <> 0 then //对数为空进行特殊处理
begin
lvDemoTree.Items.BeginUpdate;
InitListView;
lvDemoTree.Items.EndUpdate;
end;
end;procedure TfrmDemoTree.toolbtnBuildTreeClick(Sender: TObject);
begin
InitTree;
end;procedure TfrmDemoTree.mmOperate_BuildTreeClick(Sender: TObject);
begin
InitTree;
end;procedure TfrmDemoTree.tvDemoTreeMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
sbDemo.SimpleText := ' This is a TreeView!';
end;procedure TfrmDemoTree.lvDemoTreeMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
sbDemo.SimpleText := ' This is a ListView!';
end;procedure TfrmDemoTree.toolbtnExitMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
sbDemo.SimpleText := ' 关闭按钮,退出请点击!';
end;procedure TfrmDemoTree.toolbtnCnDBMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
sbDemo.SimpleText := ' 连接数据库按钮,需要连接数据库请点击!';
end;procedure TfrmDemoTree.toolbtnDiscnDBMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
sbDemo.SimpleText := ' 断开数据连接按钮,需要断开数据库请点击!';
end;procedure TfrmDemoTree.toolbtnBuildTreeMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
sbDemo.SimpleText := ' 树生成按钮,需要生成树节点请点击!';
end;procedure TfrmDemoTree.toolbDemoTreeMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
sbDemo.SimpleText := '';
end;procedure TfrmDemoTree.sbDemoMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
sbDemo.SimpleText := '';
end;end.