怎样实现TreeView读数据库循环显示:
如:顶级地区,上级地区,地区分枝.....
还有当点某一节点时候再按添加可以鼠标焦点处加入地区.
最好有事例,我刚学Delphi,现在项目太紧张了.
如:顶级地区,上级地区,地区分枝.....
还有当点某一节点时候再按添加可以鼠标焦点处加入地区.
最好有事例,我刚学Delphi,现在项目太紧张了.
解决方案 »
- webbrowser 如何不用下载页面到本地而直接得到页面的文本
- inc如何从1开始递增呢?
- 关于ASCII码的原理!
- 我该不该离开这家公司?
- rave中如何将一条记录分成三页打印?
- 我用findwindowex获得了桌面上所有IE窗口,可是有些不明白的地方,问问各位!!!!!!!!!!!!
- 如果可以检测到一个文件夹下文件的变化?(100分)
- 关于读代码时遇到的困惑,,请在标记为"*"的代码行给我加注释,谢谢!
- delphi2007怎么安装帮助文档,有没有人会啊,帮忙指点一下~~
- to alwssoan(巧克力):终于能给到足够的分了
- 为什么serversocket1.socket.localAddress的返回值总是'0.0.0.0',疑惑中???
- 如何比较日期,数据库是paradox,我用bde连,多谢了!
不过对于节点的显示是采用递归来实现的
至于加入地区,使用AddObject或AddChildObject来实现
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ExtCtrls, Grids, StdCtrls, ToolWin;type
TSHeBeiLeiBie = class(TForm)
Panel1: TPanel;
SBTreeView: TTreeView;
SBStringGrid1: TStringGrid;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton4: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton5: TToolButton;
ToolButton6: TToolButton;
procedure FormCreate(Sender: TObject);
procedure SBTreeViewClick(Sender: TObject);
procedure ToolButton1Click(Sender: TObject);
procedure ToolButton2Click(Sender: TObject);
procedure ToolButton3Click(Sender: TObject);
procedure ToolButton5Click(Sender: TObject);
private
{ Private declarations }
procedure MySBdggc(Node:TTreeNode;id:integer);
public
{ Public declarations }
end;var
SHeBeiLeiBie: TSHeBeiLeiBie;
MyKZBL:boolean;
MySBArray:Array of Array[0..3] of Variant;
MySBCount:integer;
//定义数据存储
type
PMySBPro=^TMySBPro;
TMySBPro = record
Fid:integer;
FFuID:integer;
FTaiZhangMoBan:String;
end;
implementationuses SC_SJMK, SC_SheBeiEdit;{$R *.dfm}
//递归过程调用
procedure TSHeBeiLeiBie.MySBdggc(Node:TTreeNode;id:integer);
var
i:integer;
MyBoolean:boolean;
MySBprodata: PMySBPro;
begin
for i:=0 to MySBCount-1 do
begin
if MySBarray[i,2]=id then
begin
new(MySBprodata);
PMySBPro(MySBprodata)^.Fid:=MySBarray[i,0];
PMySBPro(MySBprodata)^.FFuID:=MySBarray[i,2];
PMySBPro(MySBprodata)^.FTaiZhangMoBan:=MySBarray[i,3];
if MyBoolean=False then Node:=SBTreeView.Items.AddChildObject(Node,MySBarray[i,1],MySBprodata)
else
begin
Node:=SBTreeView.Items.AddObject(Node,MySBarray[i,1],MySBprodata);
MyBoolean:=False;
end;
MySBdggc(Node,MySBarray[i,0]);
MyBoolean:=True;
end;
end;
end;
//init SHeBeileibie
procedure TSHeBeiLeiBie.FormCreate(Sender: TObject);
var
i:integer;
begin
with sjmk do
begin
CX1.Close;
CX1.SQL.Clear;
CX1.SQL.Add('SELECT id, LeiXingName, FuID, TaiZhangMoBan FROM sb_LeiXing');
CX1.Open;
MySBCount:=DS1.DataSet.RecordCount;
SetLength(MySBArray,MySBCount);
for i:=0 to MySBCount-1 do
begin
MySBArray[i,0]:= DS1.DataSet.Fields[0].AsInteger;
MySBArray[i,1]:= DS1.DataSet.Fields[1].AsString;
MySBArray[i,2]:= DS1.DataSet.Fields[2].AsInteger;
MySBArray[i,3]:= DS1.DataSet.Fields[3].AsString;
DS1.DataSet.Next;
end;
end;
SBTreeView.Items.Clear;
MySBdggc(nil,0);
SBStringGrid1.Cells[0,0]:='设备编号';
SBStringGrid1.Cells[1,0]:='设备类别';
SBStringGrid1.Cells[2,0]:='上级编号';
SBStringGrid1.Cells[3,0]:='台帐路径';
end;
// show shebei
procedure TSHeBeiLeiBie.SBTreeViewClick(Sender: TObject);
begin
if (SBTreeView.Items.Count<1) or (SBtreeView.Selected=nil) then exit;
SBStringGrid1.Rows[1].Clear;
SBStringGrid1.Cells[0,1]:=inttostr(PMySBPro(SBTreeView.Selected.Data)^.Fid);
SBStringGrid1.Cells[1,1]:=SBTreeView.Selected.Text;
SBStringGrid1.Cells[2,1]:=inttostr(PMySBPro(SBTreeView.Selected.Data)^.FFuID);
SBStringGrid1.Cells[3,1]:=PMySBPro(SBTreeView.Selected.Data)^.FTaiZhangMoBan;
end;
//add shebei
procedure TSHeBeiLeiBie.ToolButton1Click(Sender: TObject);
begin
if ((Sender as TToolButton).Name='ToolButton6') and (SBTreeView.Items.Count<1) and (SBTreeView.Selected=nil) then exit;
SheBeiEdit:=TSheBeiEdit.Create(self);
SheBeiEdit.Caption:='设备类别添加';
with sjmk do
begin
CX1.Close;
CX1.SQL.Clear;
CX1.SQL.Add('SELECT MAX(id) AS id FROM sb_LeiXing');
CX1.Open;
SheBeiEdit.SBBH.Text:=inttostr(DS1.DataSet.Fields[0].AsInteger+1);
if (Sender as TToolButton).Name='ToolButton1' then //add the same node
begin
MyKZBL:=True;
if (SBTreeView.Items.Count>1) and (SBTreeView.Selected<>nil) and (SBTreeView.Selected.Parent<>nil) then
//不是选择顶级节点
begin
SheBeiEdit.SJSBBH.Text:=inttostr(PMySBPro(SBTreeView.Selected.Data)^.FFuID);
SheBeiEdit.SJBH.Text:=SBTreeView.Selected.Parent.Text;
end
else//没有数据或者选择顶级节点
begin
SheBeiEdit.SJSBBH.Text:='0';
SheBeiEdit.SJBH.Text:='';
end;
end
else//add the childen node
begin
MyKZBL:=False;
SheBeiEdit.SJSBBH.Text:=inttostr(PMySBPro(SBTreeView.Selected.Data)^.Fid);
SheBeiEdit.SJBH.Text:=SBTreeView.Selected.Text;
end;
end;
Try
SheBeiEdit.ShowModal;
Finally
SheBeiEdit.Free;
end;
end;
//edit shebei
procedure TSHeBeiLeiBie.ToolButton2Click(Sender: TObject);
begin
if SBTreeView.Selected=nil then exit;
SheBeiEdit:=TSheBeiEdit.Create(self);
SheBeiEdit.Caption:='设备类别编辑';
SheBeiEdit.SBBH.Text:=inttostr(PMySBPro(SBTreeView.Selected.Data)^.Fid);
if SBTreeView.Selected.Parent=nil then //设置顶级节点
begin
SheBeiEdit.SJBH.Text:='';
SheBeiEdit.SJSBBH.Text:='0';
end
else//不是顶级节点
begin
SheBeiEdit.SJBH.Text:=SBTreeView.Selected.Parent.Text;
SheBeiEdit.SJSBBH.Text:=inttostr(PMySBPro(SBTreeView.Selected.Data)^.FFuID);
end;
SheBeiEdit.SBName.Text:=SBTreeView.Selected.Text;
SheBeiEdit.TZLJ.Text:=PMySBPro(SBTreeView.Selected.Data)^.FTaiZhangMoBan;
SheBeiEdit.oldFileName.Text:=SheBeiEdit.TZLJ.Text;
Try
SheBeiEdit.ShowModal;
Finally
SheBeiEdit.Free;
end;
end;
//delete shebei
procedure TSHeBeiLeiBie.ToolButton3Click(Sender: TObject);
begin
if SBTreeView.Selected=nil then exit;
if SBTreeView.Selected.HasChildren=True then
begin
showmessage('设备类型下面还有数据,不能删除!');
exit;
end;
if Application.MessageBox('你确实要删除这个设备吗?','删除窗口',MB_YESNO)=IDNo then exit;
with sjmk do
begin
CX1.Close;
CX1.SQL.Clear;
CX1.SQL.Add('Delete From sb_LeiXing where (id='+inttostr(PMySBPro(SBTreeView.Selected.Data)^.Fid)+')');
try
CX1.ExecSQL;
except
showmessage('删除出错!可能下面还有设备!');
exit;
end;
SBTreeView.Deselect(SBTreeView.Selected);
SBStringGrid1.RowCount:=2;
SBStringGrid1.Rows[1].Clear;
Dispose(SBTReeView.Selected.Data); //free the Selected Node Data
SBTreeView.Items.Delete(SBTreeView.Selected);
end;
end;procedure TSHeBeiLeiBie.ToolButton5Click(Sender: TObject);
var
i:integer;
begin
for i:=0 to SBTreeView.Items.Count-1 do//free Pointer
Dispose(SBTReeView.Items[i].Data);
close;
end;
end.