如何实现从数据库导出数据到treeview控件 http://soesite.com/howa/img/a.JPG应该是你要的结果,在TREEVIEW里的内容所有都是从数据库里来的。你参都一下? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 to mrzho(mrzhou): 你看看我的問題吧.和這個問題比較相似.http://www.csdn.net/expert/topic/727/727520.xml?temp=.424328 从Query中一条一条提取数据写入TREEVIEW中呀。 //参考http://www.csdn.net/Expert/TopicView1.asp?id=688364function DataSetToTreeNode(mDataSet: TDataSet; mTreeView: TTreeView; mTreeNode: TTreeNode; mParentText: string): Boolean;const cFieldNameParent = 'UpperTreeId'; cFieldNameTreeName = 'TreeName'; cFieldNameTreeId = 'TreeId'; cFieldNames = cFieldNameParent + ';' + cFieldNameTreeName + ';' + cFieldNameTreeId;var vTreeNode: TTreeNode; vFieldValues: Variant;begin Result := False; if not Assigned(mDataSet) then Exit; if not Assigned(mTreeView) then Exit; if not mDataSet.Active then Exit; mDataSet.Filtered := False; mDataSet.Filter := Format('%s=%s', [cFieldNameParent, QuotedStr(mParentText)]); mDataSet.Filtered := True; if mDataSet.RecordCount = 0 then Exit; mDataSet.First; while not mDataSet.Eof do begin vTreeNode := mTreeView.Items.AddChild(mTreeNode, mDataSet.FieldByName(cFieldNameTreeName).AsString); vFieldValues := mDataSet[cFieldNames]; DataSetToTreeNode(mDataSet, mTreeView, vTreeNode, mDataSet.FieldByName(cFieldNameTreeID).AsString); ///////Begin 恢复位置 mDataSet.Filtered := False; mDataSet.Filter := Format('%s=%s', [cFieldNameParent, QuotedStr(mParentText)]); mDataSet.Filtered := True; mDataSet.Locate(cFieldNames, vFieldValues, []); ///////End 恢复位置 mDataSet.Next; end; Result := True;end;procedure TForm1.Button1Click(Sender: TObject);begin TreeView1.Items.Clear; DataSetToTreeNode(Table1, TreeView1, nil, 'NULL');end; 参考:procedure TForm5.LoadTreeView;var strsql:string;begin try// DataModule3.ADOTable3.open;// DataModule3.ADOTable3.Locate('DTname',RzComboBox1.Text,[lopartialkey]);// tid:=inttostr(DataModule3.ADOTable3.FieldByName('id').value); strsql:='select * from T where NodeType="bs"'; DQ.Active :=false; DQ.SQL.Clear ; DQ.SQL.Add(strsql); DQ.Active :=true; DQ.Filtered :=true; DQ.Filter := 'Parent=0'; U_DiGui(0,RzTreeView1.TopItem );//从当前0层开始递归建树 except showmessage('字典里没有数据!'); end;end;procedure TForm5.U_DiGui(parentID:Cardinal;ParentNode:TTreeNode);var tmpTBData:array of TableData; i,j:integer; tmpNode:TTreeNode;begin j:=DQ.RecordCount; setlength(tmpTBData,j);//保存递规上一层结点值 for i:=0 to j-1 do begin tmpTBData[i].ID := Cardinal(DQ.fieldbyname('ID').value); tmpTBData[i].Name := DQ.fieldbyname('Name').value; tmpTBData[i].ParentID := Cardinal(DQ.fieldbyname('Parent').value); DQ.Next; end; for i:=0 to j-1 do begin //递规调用建立所有结点 tmpNode:=RzTreeView1.Items.AddChild(ParentNode,tmpTBData[i].Name); // tmpNode.ImageIndex:=2; new(pData); pData^.ID:=tmpTBData[i].ID; tmpNode.Data:=pData; DQ.Filter := 'Parent=' + IntToStr(Integer(tmpTBData[i].ID)); if DQ.RecordCount >0 then begin U_DiGui(tmpTBData[i].ID,tmpNode ); end; end;end;procedure TForm5.FormShow(Sender: TObject);begin LoadTreeView; rzTreeView1.TopItem.Expanded:=true;end; 简单问题! 创建ADO对象 内存写入指针问题?WriteProcessMemory 求教WaitForMultipleObjects的用法 用Remote Data Module做数据模块时怎么捕捉连接到服务器的客户端数量? TQuery和TDBGrid控件连接后游标的问题! dbgrid问题,送分!!! 常用软件安装器这个界面及功能如何实现 flyingkiller请进 为什么while循环条件中加个and就报错 我想应该有办法 请问怎么实现Listview一次性清空所有Item问题?
你看看我的問題吧.和這個問題比較相似.
http://www.csdn.net/expert/topic/727/727520.xml?temp=.424328
http://www.csdn.net/Expert/TopicView1.asp?id=688364function DataSetToTreeNode(mDataSet: TDataSet;
mTreeView: TTreeView; mTreeNode: TTreeNode;
mParentText: string): Boolean;
const
cFieldNameParent = 'UpperTreeId';
cFieldNameTreeName = 'TreeName';
cFieldNameTreeId = 'TreeId';
cFieldNames = cFieldNameParent + ';' + cFieldNameTreeName + ';' + cFieldNameTreeId;
var
vTreeNode: TTreeNode;
vFieldValues: Variant;
begin
Result := False;
if not Assigned(mDataSet) then Exit;
if not Assigned(mTreeView) then Exit;
if not mDataSet.Active then Exit;
mDataSet.Filtered := False;
mDataSet.Filter := Format('%s=%s', [cFieldNameParent, QuotedStr(mParentText)]);
mDataSet.Filtered := True;
if mDataSet.RecordCount = 0 then Exit;
mDataSet.First;
while not mDataSet.Eof do begin
vTreeNode := mTreeView.Items.AddChild(mTreeNode,
mDataSet.FieldByName(cFieldNameTreeName).AsString);
vFieldValues := mDataSet[cFieldNames];
DataSetToTreeNode(mDataSet, mTreeView, vTreeNode,
mDataSet.FieldByName(cFieldNameTreeID).AsString);
///////Begin 恢复位置
mDataSet.Filtered := False;
mDataSet.Filter := Format('%s=%s', [cFieldNameParent, QuotedStr(mParentText)]);
mDataSet.Filtered := True;
mDataSet.Locate(cFieldNames, vFieldValues, []);
///////End 恢复位置
mDataSet.Next;
end;
Result := True;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
TreeView1.Items.Clear;
DataSetToTreeNode(Table1, TreeView1, nil, 'NULL');
end;
procedure TForm5.LoadTreeView;
var
strsql:string;
begin
try// DataModule3.ADOTable3.open;
// DataModule3.ADOTable3.Locate('DTname',RzComboBox1.Text,[lopartialkey]);
// tid:=inttostr(DataModule3.ADOTable3.FieldByName('id').value);
strsql:='select * from T where NodeType="bs"';
DQ.Active :=false;
DQ.SQL.Clear ;
DQ.SQL.Add(strsql);
DQ.Active :=true;
DQ.Filtered :=true;
DQ.Filter := 'Parent=0';
U_DiGui(0,RzTreeView1.TopItem );//从当前0层开始递归建树
except
showmessage('字典里没有数据!');
end;
end;
procedure TForm5.U_DiGui(parentID:Cardinal;ParentNode:TTreeNode);
var
tmpTBData:array of TableData;
i,j:integer;
tmpNode:TTreeNode;begin
j:=DQ.RecordCount;
setlength(tmpTBData,j);//保存递规上一层结点值
for i:=0 to j-1 do begin
tmpTBData[i].ID := Cardinal(DQ.fieldbyname('ID').value);
tmpTBData[i].Name := DQ.fieldbyname('Name').value;
tmpTBData[i].ParentID := Cardinal(DQ.fieldbyname('Parent').value);
DQ.Next;
end;
for i:=0 to j-1 do begin //递规调用建立所有结点
tmpNode:=RzTreeView1.Items.AddChild(ParentNode,tmpTBData[i].Name);
// tmpNode.ImageIndex:=2;
new(pData);
pData^.ID:=tmpTBData[i].ID;
tmpNode.Data:=pData;
DQ.Filter := 'Parent=' + IntToStr(Integer(tmpTBData[i].ID));
if DQ.RecordCount >0 then begin
U_DiGui(tmpTBData[i].ID,tmpNode );
end;
end;
end;procedure TForm5.FormShow(Sender: TObject);
begin
LoadTreeView;
rzTreeView1.TopItem.Expanded:=true;
end;