关于treeviewer的问题 我想写一个这样的界面比如当我点击区域资料的时候.右边的dbgird里面会显示出相对应的信自.因为没用过这个组件.希望能告诉我方法.我需要有例子.谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 补充一下.比如点右下角新增.在区域资料内增加了(05)某某某 如何让treeview里面也有显示. http://topic.csdn.net/u/20080604/16/8dec91fb-efe3-4ded-9995-8a82db22a214.html 哪张贴子我看过了.我要的是treeviwer 里面.比如说区域资料下面的资料.都是通过数据库加进去的.如果我在数据库里面做了增加或减少.上面也会有反映. 你需要理解一下TreeView控件的真正作用 http://www.cnblogs.com/del/archive/2008/03/20/1114450.html?updated=1 对于treeview的变更,你需要重新从数据库中提取数据加载,进行刷新。因为treeview不是一个数据感知控件 对于treeview的使用,我简单弄了个例子,你看看,其实treeview有一个属性data可以把这个充分利用起来,很不错的。(说的对不对,凑和看吧)unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, StdCtrls, ComCtrls;type PDEPT = ^TDEPT; TDEPT = Record deptno: string; deptname: String; END;type TForm1 = class(TForm) ADOConnection1: TADOConnection; TreeView1: TTreeView; Button1: TButton; ADOQuery1: TADOQuery; ADOQuery2: TADOQuery; procedure Button1Click(Sender: TObject); procedure TreeView1Click(Sender: TObject); private { Private declarations } FDEPT: PDEPT; //procedure getEmployeeInfo(bh: String); public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject); //这个你可以做成一个过程,当数据库中内容变化时调用它就可以了var RNode,vNode1,vNode2: TTreeNode;begin //加载部门信息 TreeView1.Items.Clear; RNode := Treeview1.Items.Add(nil,'所有部门'); with adoquery1 do begin close; sql.text := 'select BH,MC from test where length(bh)=3 order by BH'; Open; while not eof do begin New(FDEPT); FDEPT.deptno := Fields[0].AsString; FDEPT.deptname := Fields[1].AsString; vNode1 := Treeview1.Items.AddChildFirst(RNode,FDEPT.deptno+' '+FDEPT.deptname); vNode1.Data := FDEPT; //开始取得子部门 with adoquery2 do begin Close; SQL.Text := ' Select BH,MC from test where length(bh)<>3 and substr(bh,1,3)=:deptno Order by BH'; Parameters.ParamByName('deptno').value := FDEPT.deptno; Open; while not adoquery2.Eof do begin New(FDEPT); FDEPT.deptno := Fields[0].AsString; FDEPT.deptname := Fields[1].AsString; vNode2 := Treeview1.Items.AddChildFirst(vNode1,FDEPT.deptno+' '+FDEPT.deptname); vNode2.Data := FDEPT; Next; end; end; Next; end; end;end;procedure TForm1.TreeView1Click(Sender: TObject);begin if Treeview1.Selected.Level=1 then begin New(FDEPT); FDEPT := TreeView1.Selected.Data; showmessage(FDEPT.deptno+' '+FDEPT.deptname); //这里你可以关联数据库进行查询,使其与dbgrid关联 end;end;end. 添加节点,就用递归的方法实现吧...例子就不给了,关键是如何让树的节点跟着数据库的操作走,比如新增一条记录时,相应的节点也新增一个,删除一条记录时,也删除相应的节点. type TCoid=record //记录用来存放 coid 编号 Coid:string; Isopen:boolean; Companytypeid:integer; Areaid:Variant; nNodeData:TTreeNode; end; PTCoid=^TCoid; //结构体指针 pCoid:array [0..10000] of PTCoid; 添加节点时,动态增加数组元素,并为每个属性赋值(树的AbsoluteIndex 值与数组下标相对应),这样可以使得树的节点和数据库关联起来,之后是操作,在修改数据之前,你可以记下状态,然后再在 DataSource1DataChange 中进行判断,修改的是哪些字段,再对树进行调,比如移动节点 TreeView1.Selected.MoveTo(pCoid[i].nNodeData,naAddChildFirst);//参数:父节点(需要移动到哪个节点下),添加方式,要注意数组中的属性也要跟着变,不然查询数据时会有误 新增,删除数据,注意新增删除时,对数组也要作同样的操作(新增,删除元素),然后再对树进行操作 如果需要完整的例子....请留言!! delphi 中文在英文系统乱码问题. 为什么属性caption加中文会乱码.代码设置caption中文就正常? delphi如何删除动态生成的多个Label Delphi控件与注册表信息有关吗? 100分,問一個水晶報表的小問題 请教:我如何去显示206号字符。 想用DBchart显示一个表 求教 有用过 RX Library 2.75 中的 Rxrichedit 者请进 那位高手知道在那下载这几本书啊? 一个困扰了我很久的问题,关于用BDE连SQL SERVER,请大侠请教? 断点不能调试 sql更新只更新第一行
区域资料下面的资料.都是通过数据库加进去的.如果我在数据库里面做了增加或减少.上面也会有反映.
对于treeview的变更,你需要重新从数据库中提取数据加载,进行刷新。
因为treeview不是一个数据感知控件
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls, ComCtrls;type
PDEPT = ^TDEPT;
TDEPT = Record
deptno: string;
deptname: String;
END;type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
TreeView1: TTreeView;
Button1: TButton;
ADOQuery1: TADOQuery;
ADOQuery2: TADOQuery;
procedure Button1Click(Sender: TObject);
procedure TreeView1Click(Sender: TObject);
private
{ Private declarations }
FDEPT: PDEPT;
//procedure getEmployeeInfo(bh: String);
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject); //这个你可以做成一个过程,当数据库中内容变化时调用它就可以了
var
RNode,vNode1,vNode2: TTreeNode;
begin
//加载部门信息
TreeView1.Items.Clear;
RNode := Treeview1.Items.Add(nil,'所有部门');
with adoquery1 do
begin
close;
sql.text := 'select BH,MC from test where length(bh)=3 order by BH';
Open;
while not eof do
begin
New(FDEPT);
FDEPT.deptno := Fields[0].AsString;
FDEPT.deptname := Fields[1].AsString;
vNode1 := Treeview1.Items.AddChildFirst(RNode,FDEPT.deptno+' '+FDEPT.deptname);
vNode1.Data := FDEPT;
//开始取得子部门
with adoquery2 do
begin
Close;
SQL.Text := ' Select BH,MC from test where length(bh)<>3 and substr(bh,1,3)=:deptno Order by BH';
Parameters.ParamByName('deptno').value := FDEPT.deptno;
Open;
while not adoquery2.Eof do
begin
New(FDEPT);
FDEPT.deptno := Fields[0].AsString;
FDEPT.deptname := Fields[1].AsString;
vNode2 := Treeview1.Items.AddChildFirst(vNode1,FDEPT.deptno+' '+FDEPT.deptname);
vNode2.Data := FDEPT;
Next;
end;
end;
Next;
end;
end;
end;procedure TForm1.TreeView1Click(Sender: TObject);
begin
if Treeview1.Selected.Level=1 then
begin
New(FDEPT);
FDEPT := TreeView1.Selected.Data;
showmessage(FDEPT.deptno+' '+FDEPT.deptname); //这里你可以关联数据库进行查询,使其与dbgrid关联
end;
end;end.
type
TCoid=record //记录用来存放 coid 编号
Coid:string;
Isopen:boolean;
Companytypeid:integer;
Areaid:Variant;
nNodeData:TTreeNode;
end;
PTCoid=^TCoid; //结构体指针 pCoid:array [0..10000] of PTCoid;
添加节点时,动态增加数组元素,并为每个属性赋值(树的AbsoluteIndex 值与数组下标相对应),这样可以使得树的节点和数据库关联起来,之后是操作,在修改数据之前,你可以记下状态,然后再在 DataSource1DataChange 中进行判断,修改的是哪些字段,再对树进行调,比如移动节点 TreeView1.Selected.MoveTo(pCoid[i].nNodeData,naAddChildFirst);//参数:父节点(需要移动到哪个节点下),添加方式,要注意数组中的属性也要跟着变,不然查询数据时会有误
新增,删除数据,注意新增删除时,对数组也要作同样的操作(新增,删除元素),然后再对树进行操作 如果需要完整的例子....请留言!!