现阶段我已将数据添加进数据库,可TreeView不能即时显示添加记录,要如何操作,烦请附个代码,不要纯理论的,不是科班出身,基础不牢固,只有代码才能看得懂,谢谢!
树结构如下:
-01 主要材料
----001 白牛
----002 黑牛
-02 辅助材料
----001 盐酸
----002 硫酸
-03 产成品
-04 在产品
-05 半成品数据库表结构如下:
一级表'wlyjfl':wlyjfl_id,wlyjfl_name;
二级表‘wlejfl':wlejfl_wlyjfl_name,wlejfl_id,wlejfl_name;其中wlejfl_wlyjfl_name与一级表中的wlyjfl_name相同;窗体上控件为:TreeView1,Edit1,Edit2.Combobox1(此为二级添加时,显示一级目录wlyjfl),button1,Adoquery1;
基本操作如下:选择Combobox1项,在Edit1输入ID,Edit2输入name,button1为添加按钮,要求Treeview1即时更新显示添加数据,请高手们指点下,谢谢了!
树结构如下:
-01 主要材料
----001 白牛
----002 黑牛
-02 辅助材料
----001 盐酸
----002 硫酸
-03 产成品
-04 在产品
-05 半成品数据库表结构如下:
一级表'wlyjfl':wlyjfl_id,wlyjfl_name;
二级表‘wlejfl':wlejfl_wlyjfl_name,wlejfl_id,wlejfl_name;其中wlejfl_wlyjfl_name与一级表中的wlyjfl_name相同;窗体上控件为:TreeView1,Edit1,Edit2.Combobox1(此为二级添加时,显示一级目录wlyjfl),button1,Adoquery1;
基本操作如下:选择Combobox1项,在Edit1输入ID,Edit2输入name,button1为添加按钮,要求Treeview1即时更新显示添加数据,请高手们指点下,谢谢了!
解决方案 »
- Iocomp TiStripChart画曲线问题
- 怎么这些语句都不执行,请高手帮忙看看
- 简单的fastreport打印问题-动态设计报表时为什么不能打印多页?
- EXCEL转ACCESS数据库的方法
- TDBGridEh
- 如何让程序不在win2000的任务管理器里面的<应用程序>页里的列表里出现(进程页里面可以有)
- 有哪位高手能够帮忙详细讲解一下TQuery中的Params属性的用法!!!
- ★★★关于指针的内存问题,不知道这样做是否会出错?
- >>>> 批处理方式下,调用UpdateBatch怎么跟踪每一条记录?
- 请问如何在DLL中存放全局变量??
- 提示:至少一个参数没有被指定值
- 在delphi中如何把groupbox改成圆角矩形
Adoquery4.Close;
Adoquery4.SQL.Clear;
Adoquery4.SQL.Text:='select * from wlyjfl';
Adoquery4.Open;
Treeview1.Items.Clear;
while not Adoquery4.Eof do
begin
node:=TreeView1.Items.Add(nil,Adoquery4.fieldbyname('wlyjfl_id').AsString+' '+Adoquery4.fieldbyname('wlyjfl_name').AsString);
Adoquery7.Close;
Adoquery7.SQL.Clear;
Adoquery7.SQL.Text:='select * from wlejfl where wlejfl_wlyjfl_name='''+Adoquery4.fieldbyname('wlyjfl_name').AsString+'''';
Adoquery7.Open;
while not Adoquery7.Eof do
begin
TreeView1.Items.AddChild(node,Adoquery7.fieldbyname('wlejfl_id').AsString+' '+Adoquery7.fieldbyname('wlejfl_name').AsString);
Adoquery7.Next;
end;
Adoquery4.Next;
end;
end;
http://topic.csdn.net/u/20101103/11/38a93f13-5ca5-4341-b799-d69483026f95.html?80199
你这方法我之前弄过,每次添加时,TreeView会闪一下,效果不好呀。
http://topic.csdn.net/u/20101103/11/38a93f13-5ca5-4341-b799-d69483026f95.html?80199
的
hys_427给你的解决方案吧
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;
数据表二:主要材料 01001 白牛
主要材料 01002 黑牛
因为我在输入时,有个combobox选择一级目录的分类,属于哪一类的。在数据库二级表中,也有这个分类。现在我希望是在添加数据时,自动比较新添加的记录中的一级分类与TreeView一级目录哪个相同,如果相同,则在此目录下增加二级节点。01002这种代码我是依据选择的一级分类自动生成的,不是人为输入的。现在就是要判断父结点哪个别TEXT与数据库二级表中fieldbyname('一级目录').asstring相同,是就往下新增子节点。大概思路是这样,代码写不出来
begin
result:=TreeView1.Items[0].getFirstChild;
while result<>nil do begin
if node.Text=str then
break;
result:=result.getNextSibling;
end;
end;//找到对应的结点后,直接添加节点就可以了
var
node:TTreeNode;
...
node:=FindNode(str);
if node<>nil then
TreeView1.Items.AddChild(node,str);
node:TTreeNode;
加一级目录节点:node:=TreeView1.items.add(nil,'一级目录');
加二级目录节点:TreeView1.items.addchild(node,'二级目录');
上面这样加节点的代码没错吧,我也只明白这个,汗。现在就是要加二级节点,Node这个要自动进行判断一下,这样才能加进去所属的二级节点。比如一级:01,02,03。现有二级:01002,这个是应该加在一级01下面的,就这个判断代码整不来
if treeview1.items[i].text='01' then
begin
TreeView1.items.addchild(treeview1.items[i],'01002');
break;
end;