我是一个刚开始学习delphi编程的新手。想一个。treeview显示数据表中数据的小程序,自己看书及上网搜方法搞了几个星期,还是没解决.恳请各位高手帮助。
数据表有三个字段a、b、c,分别对应treeview中的三个结点。并且三个字段的数据分别是由子窗口的三个编辑框输入的。
a b c
a1
a2 b2 c2
a3 b3
效果如下:
│---a1
│
│---a2
│ │
│ │---b2
│ │
│ │---c2
│
│---a3
│
│---b3
请高手们教我建树以及数据输入与显示的方法.谢谢了!
因为是新手,所以分不多,不好意思!
数据表有三个字段a、b、c,分别对应treeview中的三个结点。并且三个字段的数据分别是由子窗口的三个编辑框输入的。
a b c
a1
a2 b2 c2
a3 b3
效果如下:
│---a1
│
│---a2
│ │
│ │---b2
│ │
│ │---c2
│
│---a3
│
│---b3
请高手们教我建树以及数据输入与显示的方法.谢谢了!
因为是新手,所以分不多,不好意思!
解决方案 »
- delphi中如何将数据从sqlserver高效导入到oracle中
- 请问有人有模拟水纹效果的Delphi代码吗?
- ADO)Query批量提交的问题,急!在先等待,若能解决,送北图电影票
- 这样为何不行???
- 如何使界面显示美观?
- 从接触计算机到现在的几个难忘时刻~希望与大家共享美好程序人生!
- 给不了分了,急!!提示:"贴子回复次数大于跟给分次数" how can i do??
- 用友和金蝶 的数据接口和格式
- 关于排课,欢迎探讨。先来的10个人每人十分
- DELPHI XE 自动关闭的问题。
- 想写一个服务端+很多客户端操发邮件,不知道怎么开始
- File not found: 'Source\pr_dialog.pas',怎么处理
procedure TForm1.RzBitBtn1Click(Sender: TObject);
var N: TTreeNode;
begin
TreeView1.Items.Add(nil, 'a1');
N := TreeView1.Items.Add(nil, 'a2');
TreeView1.Items.AddChild(N, 'b2');
TreeView1.Items.AddChild(N, 'c2');
N := TreeView1.Items.Add(nil, 'a3');
TreeView1.Items.AddChild(N, 'b3');
end;
var
iLoop:Integer;
Master,MasterNode:TTreeNode;
begin
adoq_getop.Close;
//SELECT distinct PARN_TYP FROM WWW where parn_typ<>'.' and parn_typ is not null order by PARN_TYP desc
adoq_getop.SQL.Text:='SELECT distinct PARN_TYP FROM WWW where parn_typ<>''.'' and parn_typ is not null order by PARN_TYP desc';
adoq_getop.Open;
adoq_getop.First;
cx_TV.Items.BeginUpdate;
cx_TV.Items.Clear;
Master:=cx_TV.Items.Add(nil,'昆盈BOM表檢視');
while not adoq_getop.Eof do
begin
if adoq_getop.FieldByName('PARN_TYP').AsString<>'' then
begin
Screen.Cursor:=crSQLWait;
MasterNode:=cx_TV.Items.AddChild(Master,VarToStr(adoq_getop.FieldValues['PARN_TYP']));
Application.ProcessMessages;
qry_op.Close;
qry_op.SQL.Text:='SELECT DISTINCT PARN_LITM FROM WWW WHERE PARN_TYP='''+ VarToStr(adoq_getop.FieldValues['PARN_TYP'])+''' GROUP BY PARN_LITM';
qry_op.Open;
for iLoop:=0 to qry_op.RecordCount -1 do
begin
cx_TV.Items.AddChild(MasterNode,VarToStr(qry_op.FieldValues['PARN_LITM']));
qry_op.Next;
end;
Application.ProcessMessages;
cx_TV.Items.EndUpdate;
Screen.Cursor:=crDefault;
end;
adoq_getop.Next;
Application.ProcessMessages;
end;
{
ThreadTView:=cx_TV;
ViewThread:=TExpandLH.Create;
ViewThread.Resume;
}
end;
2.調用:procedure TRES_BOM_VIEW_F.btnSB_SearchClick(Sender: TObject);
begin
inherited;
try
RES_LOADING_F:=TRES_LOADING_F.Create(Self);
RES_LOADING_F.Label1.Caption:='正在檢索相關數據......';
RES_LOADING_F.Show;
RES_LOADING_F.Update;
CREATETREEVIEWMODEL;
finally
RES_LOADING_F.Close;
end;
end;
回复 ye_jufei :您写的有点深,好多看不懂.还有好多要学啊.
a b c
a1
a2 b2 c2
a3 b3】
树对应的数据表不能是这样的结构
除非你的树只有2层,而且第2层最多2兄弟(堂兄弟不限)
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, DB, ADODB;type
TForm1 = class(TForm)
TreeView1: TTreeView;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
procedure FormCreate(Sender: TObject);
procedure ShowData;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb';
ADOConnection1.Connected:=true;
ADOQuery1.Connection:=ADOConnection1;
showdata;
TreeView1.FullExpand;
end;procedure TForm1.ShowData;
var
sqlstr:string;
i,l:integer;
a,b,c:string;
aNode:TTreeNode;
begin
sqlstr:='select * from 表1';
with ADOQuery1 do begin
close;
SQL.Text:=sqlstr;
open;
first;
l:=RecordCount;
for i:=1 to l do begin
a:=trim(FieldByName('a').AsString);
b:=trim(FieldByName('b').AsString);
c:=trim(FieldByName('c').AsString);
if a<>'' then begin
aNode:=TreeView1.Items.AddChild(nil,a);
if b<>'' then begin
TreeView1.Items.AddChild(aNode,b);
if c<>'' then begin
TreeView1.Items.AddChild(aNode,c);
end;
end;
end;
next;
end;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
sqlstr1,sqlstr2:string;
begin
if trim(edit1.Text)<>'' then begin //根据三个edit的情况构造sql语句
sqlstr1:='insert into 表1(a';
sqlstr2:=' values ('''+trim(edit1.Text)+'''';
if trim(edit2.Text)<>'' then begin
sqlstr1:=sqlstr1+',b';
sqlstr2:=sqlstr2+','''+trim(edit2.Text)+'''';
if trim(edit3.text)<>'' then begin
sqlstr1:=sqlstr1+',c';
sqlstr2:=sqlstr2+','''+trim(edit3.Text)+'''';
end;
end;
sqlstr1:=sqlstr1+')'+sqlstr2+')';
//构造sql语句完成后,执行插入操作
with ADOQuery1 do begin
close;
sql.Text:=sqlstr1;
ExecSQL; TreeView1.Items.Clear;
ShowData;
TreeView1.FullExpand;
end;
end;
end;end.
- - 你问的是 treeview 的用法好吧。
数据库读取出来再把a1啥的一换不就ok了吗。
谢谢大家的耐心,我好好学学.我初步试一下,因为我用的数据库是sqlite,数据表名为dat.db.运行之后,点击button1提示:project project1.exe raised exception class Eoleexception with message 'no such table:dat.db(1)'.process stopped.Use step or run to contiune.
根据数据库结构生成TreeView
zgbm bmmc xm
主管部门1 部门1
主管部门1 部门1 职员1
主管部门1 部门1 职员2
主管部门1 部门2 职员3
主管部门2 部门1 职员4
主管部门2 部门2 职员5
主管部门3 部门1 职员6
主管部门3 部门2 职员7
按您的代码,数据已显示出来了,但把第三层的显示到了第二层的兄弟层中。不知道哪里出了问题?