如何在viewtree中插入结点,树中的结点存放在SQL2000后台数据库!

国风 2004-05-08 02:47:47
插入结点的要求如下:
当后台数据库为空时,插入的结点的长度为以后插入结点的标准!
如:001,后面插入到树中同一级别的数据必须长度和"001"相等!
插入到父结点的子结点的前几位一定要和父结点相同.如父结点为"001",那插入的子结点一定要以"001"打头.基本规则如下:
001
001001
001002
001002001
001002001001
002
002001
002002
.
.
.
树的深度控制在4
数据库表如下:
CREATE TABLE jobs
(
id varchar(15) NOT NULL,--ID号
name varchar(50) NOT NULL,--名称
jibie int NOT NULL,--级别(1,2,3,4)
moji int NOT NULL, --是否为末级(0为末级,1非末级)
PRIMARY KEY (ID)
)

...全文
43 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
国风 2004-05-13
  • 打赏
  • 举报
回复
我还没试,如果行的话一定给!:)谢了各位。
还有就是长度是由用户自由设定的。
buickfl 2004-05-11
  • 打赏
  • 举报
回复
你将每一级的长度设定,例每一级长度都为3,则插入时判断字符串长度若为3则级别为1,若为4则长度不符不能插入。
lzx130 2004-05-11
  • 打赏
  • 举报
回复
procedure FormCreate(Sender: TObject);
procedure deletetemp(node: Ttreenode);
procedure addchildren(node: Ttreenode);
procedure TreeView1Expanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure cxB_okClick(Sender: TObject);
private
name :string;
{ Private declarations }
public
{ Public declarations }
end;

var
tj_snw: Ttj_snw;


implementation

uses Module;

{$R *.dfm}

procedure Ttj_snw.FormCreate(Sender: TObject);
var i :integer;
node :Ttreenode;
list :Tstringlist;
s : string;
begin
DataModule_main.ADOQuery_tj5.Close;
DataModule_main.ADOQuery_tj5.sql.Clear;
DataModule_main.ADOQuery_tj5.SQL.Add('SELECT jgname FROM department WHERE (jgbm LIKE' +'''__'''+') ORDER BY jgbm');
DataModule_main.ADOQuery_tj5.Open;
list:=Tstringlist.Create; //创建Tstringlist对象
while not DataModule_main.ADOQuery_tj5.EOF do
begin
list.Append(DataModule_main.ADOQuery_tj5.fieldbyname('jgname').asstring); //给list附值
DataModule_main.ADOQuery_tj5.next;
end;
for i:=0 to list.count-1 do
begin
s:=list.strings[i];
node:=TreeView1.Items.add(TreeView1.selected,s);
TreeView1.items.addchild(node,'temp');
end;
//TreeView1.items[1].selected:=true; //默认状态下,设置第一项为选中状态
end;


procedure Ttj_snw.deletetemp(node: Ttreenode);
var
Tempnode: Ttreenode;
begin
if (node.count=1) then
begin
tempnode:=node.getFirstChild; //检验当前节点的子节点
if (tempnode.text='temp') then //如果节点为‘temp’则删触
tempnode.Delete;
end;

end;



procedure Ttj_snw.addchildren(node: Ttreenode);
var
s :string;
tempnode :Ttreenode;
begin
s:=node.text;
{
还可以通过node.parent.text访问上一呈node
}
deletetemp(node);
DataModule_main.ADOQuery_tj5.close;
DataModule_main.ADOQuery_tj5.sql.clear;
DataModule_main.ADOQuery_tj5.sql.add('DECLARE @s char(50) SELECT @s = jgbm FROM department WHERE (rtrim(ltrim(jgname)) ='''+trim(s)+''') SELECT jgname FROM department WHERE jgbm LIKE rtrim(ltrim(@s))+'+'''__'''+' ORDER BY jgbm');
DataModule_main.ADOQuery_tj5.open;

while not DataModule_main.ADOQuery_tj5.EOF do
begin
tempnode:=treeview1.items.addchild(node,DataModule_main.ADOQuery_tj5.fieldbyname('jgname').asstring);
treeview1.items.addchild(tempnode,'temp');
DataModule_main.ADOQuery_tj5.next;
end;

end;

procedure Ttj_snw.TreeView1Expanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
begin
{ 按级别产生动作
case(node.Level) of
0:if(node.count<=1) then addchildren(node);
1:if(node.count<=1) then addchildren(node);
end;
}
if(node.count<=1) then addchildren(node);
name:=trim(node.Text);
edit1.Text:=name;
end;


你运气好我刚写完~~~
是动态的

给分给分给分给分给分给分给分给分给分给分~~~~~

给分给分给分给分~~~~~
FlyAnyWhere 2004-05-11
  • 打赏
  • 举报
回复
1。值存到节点的data中就行啊,
2。插入的时候取出父节点的值,按照规则创建新值,再参照1
国风 2004-05-08
  • 打赏
  • 举报
回复
001 //设"001"为第一插入到表中的数据,级别为1,末级为1
001001 //级别为2,末级为1
001001001 //级别为3,末级为1
001001001001 //级别为4,末级为0
002 //能插入,长度和"001"相等,级别为1,末级为0
0020001 //不能插入,长度和"001001"
0003 //不能插入,长度和"001"不等
注:同意级别的长度一定要相等.
国风 2004-05-08
  • 打赏
  • 举报
回复
在做插入时,只让用户输入ID和名称,级别是让系统自己识别的.如表为空,则现在插入的级别为1,末级标志为0;如果已经有"001"存在,则插入"001001"时,自动插入在"001"的子结点上,级别为2,末级标志为0,"001"的末级标志改为1.
xdf221 2004-05-08
  • 打赏
  • 举报
回复
在TREEVIEW里显示树形结构
adoconnection1 是ADO连接控件TADOConnection

procedure settreeview(as_id:string;ai_jb:integer);
var
adoqry:Tadoquery;
begin
adoqry := Tadoquery.create(nil);
adoqry.connection := adoconnection1;
adoqry.close;
if as_id = '' then adoqry.sql.text := 'select * from jobs'
else adoqry.sql.text := 'select * from jobs where id like ' + quotedstr(as_id + '%') + ' and length(id) = ' + inttostr(ai_jb * 3);
adoqry.open;
adoqry.first;
while not adoqry.eof do
begin
treeview1.items.add(vartostr(adoqry.fieldvalues['name']));
settreeview(vartostr(adoqry.fieldvalues['name']),ai_jb+1);
adoqry.next;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
treeview1.clear;
settreeview('',0);
end;
lijinghe1 2004-05-08
  • 打赏
  • 举报
回复
插就行了呗,有什么问题?

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧