treeview已与数据库连接并显示数据,树结构为:
-01 主材料
--0101 白牛
--0102 黑牛
-02 辅材
--0201 盐酸
--0202 硫酸
现在有 Edit1,Edit2两个框,Edit1输入"0103",Edit2输入"中白牛",BUTTON为添加按钮,要求加进数据库后,TREEVIEW能自动判断显示在 "01 主材料" 下,要如何操作?
-01 主材料
--0101 白牛
--0102 黑牛
-02 辅材
--0201 盐酸
--0202 硫酸
现在有 Edit1,Edit2两个框,Edit1输入"0103",Edit2输入"中白牛",BUTTON为添加按钮,要求加进数据库后,TREEVIEW能自动判断显示在 "01 主材料" 下,要如何操作?
解决方案 »
- Twebbrowser 如何实现一个自定义下载管理器 delphi该如何实现?高手帮帮忙啊
- 在Access和Sqlserver都通用的保存日期的SQL语句如何写?
- 就剩这么点分了.调用DLL时报错:access violation at address
- 有关listview的问题。
- 如何共用一个窗体某一控件的值
- Help!!!
- 急!MediaPlayer控件的播放窗口咋么变大?
- 为什么在安装了BCB6之后Delphi6的某些包在Delphi启动时不能加载?
- 怎样在注册表中新建一个REG_MULTI_SZ类型的值?
- delphi下拉框删除时出现乱码且光标会向前一个字符跳?WHY
- ADO连接远程Oracle数据库问题
- 关于数据集显示问题
不知道是不是我表述不清楚,我现在treeview已经显示数据库记录,现在添加二级记录时,不能即时更新treeview数据,要关闭窗口重新打开才能显示。因为我显示代码是用onshow事件写的。一级目录添加我用
treeview1.items.beginupdate;
Treeview1.items.add(nil,Adoquery1.fieldbyname('一级目录').asstring);
treeview1.items.endupdate;
这样可以即时添加更新显示一级目录。在二级目录添加时,如何操作才能像一级目录那样即时更新显示。
treeview1.items.beginupdate;
Treeview1.items.add(node,Adoquery1.fieldbyname('二级目录').asstring);
treeview1.items.endupdate;
这样的话,node这个节点要从哪取数,就这里搞不出来
s1,s2,s3,s4,s:string;
i,m,n:Integer;
tn:TTreeNode;
begin
s1:=self.Edit1.Text;
s2:=self.Edit2.Text;
if (s1='') or (s2='') then
begin
MessageBox(Application.Handle,'信息填写不完整','信息',MB_OK or MB_ICONINFORMATION);
Exit;
end;
i:=Length(s1);
if i=2 then//说明是一级目录
begin
m:=self.TreeView1.Items.Count;
if m>0 then
begin
for n:=0 to m-1 do
begin
if self.TreeView1.Items[n].Parent<>nil then
Continue;
s:=self.TreeView1.Items[n].Text;
s:=Copy(s,1,2);
if s=s1 then
begin
MessageBox(Application.Handle,'编号已经存在','信息',MB_OK or MB_ICONINFORMATION);
Exit;
end;
end;
self.TreeView1.Items.AddChild(nil,s1+' '+s2);
end
else
self.TreeView1.Items.AddChild(nil,s1+' '+s2);
Exit;
end;
if i=4 then//说明是二级目录
begin
s3:=Copy(s1,1,2);//对应的一级目录
m:=Self.TreeView1.Items.Count;
if m=0 then
begin
MessageBox(application.Handle,'未找到对应的一级目录','信息',MB_OK or MB_ICONINFORMATION);
Exit;
end;
tn:=nil;
for n:=0 to m-1 do
begin
if self.TreeView1.Items[n].Parent<>nil then
Continue;
s:=self.TreeView1.Items[n].Text;
s4:=Copy(s,1,2);
if s4<>s3 then//不是对应的一级目录
Continue;
tn:=self.TreeView1.Items[n];//这个就是对应的一级目录
Break;
end;
if tn=nil then
begin
MessageBox(application.Handle,'未找到对应的一级目录','信息',MB_OK or MB_ICONINFORMATION);
Exit;
end;
m:=tn.Count;
if m=0 then
self.TreeView1.Items.AddChild(tn,s1+' '+s2)
else
begin
for n:=0 to m-1 do
begin
s:=tn.Item[n].Text;
s:=Copy(s,1,4);
if s=s1 then
begin
MessageBox(Application.Handle,'输入的编号已经存在','信息',MB_OK or MB_ICONINFORMATION);
Exit;
end;
end;
self.TreeView1.Items.AddChild(tn,s1+' '+s2);
end;
Exit;
end;
MessageBox(application.Handle,'输入的编号不合法','信息',MB_OK or MB_ICONINFORMATION);
end;
你formshow的时候怎么做的,你就在添加内容后,把formshow做的事情,再做一遍,不就可以啦~~
procedure TForm1.FormCreate(Sender: TObject);
begin
TreeView1.FullExpand;
end;procedure TForm1.AddDataToTreeview;
var
idNum,id:string;
node:TTreeNode;
begin
idNum:=copy(edit1.Text,1,2); //取得主ID号
node:=TreeView1.Items[0]; //取得树根
while(node<>nil) do begin
id:=copy(node.Text,1,2);//取得该结点的id号
if id=idNum then begin
TreeView1.Items.AddChild(node,edit1.Text+' '+edit2.Text);
end;
node:=node.getNextSibling;
end;
end;
闲着没事,给你做了一下,每次添加数据的时候,把运行一下函数
AddDataToTreeview即可即:
procedure TForm1.Button1Click(Sender: TObject);
begin
//1.添加数据到数据库
//2.运行上面给你的函数
AddDataToTreeview;
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;調用:
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;