我用一表结构如下:
id name parid01 管辖地区 0
0101 城北区 01
010101 街道1 0101
0102 江南区 01
010201 街道1 0102
请问怎样生成一棵树在treeview中?谢谢
id name parid01 管辖地区 0
0101 城北区 01
010101 街道1 0101
0102 江南区 01
010201 街道1 0102
请问怎样生成一棵树在treeview中?谢谢
procedure CreateSubTree(FNodeName: string; Node: TTreeNode = nil);
var
mLocalName: string;
TreeNode: TTreeNode;
Ads_Tmp: TADOQUERY;
TREEVIEW1:TTREEVIEW;
begin
ADS_Tmp := TADOQUERY.Create(application);
ADS_Tmp.ConnectionString :='Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=ldj;Data Source=LYY';
with ADS_Tmp do
begin
Close;
sql.Clear ;
sql.Add ( 'Select * from treeview Where PID =' + FNodeName);
Open;
First;
while not Eof do
begin
mLocalName := FieldbyName('ID').Asstring;
TreeNode := TreeView1.Items.AddChild(Node, FieldByName('Name').AsString);
CreateSubTree(mLocalName, TreeNode);
Next;
end;
end;
end;
调用//
procedure TForm1.Button1Click(Sender: TObject);
begin
CreateSubTree('0', nil);
end;end.
这句话有问题。
你的parid是做什么用的。你的id号是不是分子级和父级的。如果是的话,比如2个长度为一级,你可以根据这个判断它在树中的位置和关系。。
|
-城北區
| |
| -街道1
|
-城南區
|
-街道2Treeview中的效果圖
标题:数据集处理成可视树
说明:处理父节点标识字段、节点文本字段、节点标识字段这种表结构
设计:Zswang
日期:2002-05-20
支持:[email protected]
//*)///////Begin Source
function DataSetToTreeNode(mDataSet: TDataSet;
mFieldNameParent: string; //父节点标识字段名
mFieldNameTreeText: string; //节点文本字段名
mFieldNameTreeId: string; //节点标识字段名
mTreeView: TTreeView; mTreeNode: TTreeNode;
mParentText: string): Boolean;
var
vTreeNode: TTreeNode;
vFieldValues: Variant;
vFieldNames: string;
begin
Result := False;
if not Assigned(mDataSet) then Exit;
if not Assigned(mTreeView) then Exit;
if not mDataSet.Active then Exit;
vFieldNames := Format('%s;%s;%s',
[mFieldNameParent, mFieldNameTreeText, mFieldNameTreeId]);
mDataSet.Filtered := False;
mDataSet.Filter := Format('%s=%s', [mFieldNameParent, 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(mFieldNameTreeText).AsString);
vFieldValues := mDataSet[vFieldNames];
DataSetToTreeNode(mDataSet, mFieldNameParent, mFieldNameTreeText,
mFieldNameTreeId, mTreeView, vTreeNode,
mDataSet.FieldByName(mFieldNameTreeId).AsString);
///////Begin 恢复位置
mDataSet.Filtered := False;
mDataSet.Filter := Format('%s=%s', [mFieldNameParent, QuotedStr(mParentText)]);
mDataSet.Filtered := True;
mDataSet.Locate(vFieldNames, vFieldValues, []);
///////End 恢复位置
mDataSet.Next;
end;
Result := True;
end;
///////End Source///////Begin Demo
procedure TForm1.Button1Click(Sender: TObject);
var
vADOQuery: TADOQuery;
begin
TreeView1.Items.Clear; vADOQuery := TADOQuery.Create(nil);
try
vADOQuery.ConnectionString :=
'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=ldj;Data Source=LYY';
vADOQuery.SQL.Text := 'Select * from treeview';
vADOQuery.Open;
DataSetToTreeNode(vADOQuery, 'parid', 'name', 'id',
TreeView1, nil, '0');
vADOQuery.Close;
finally
vADOQuery.Free;
end;
end;
///////End Demo
TreeNode := TreeView1.Items.AddChild(Node, FieldByName('Name').AsString);TreeView1之前應加上Form1,我調試通過了,無錯誤。
TreeNode := Form1.TreeView1.Items.AddChild(Node, FieldByName('Name').AsString);