treeview 问题急!!!
1楼: Server有如下一张表
id Lh parent_Lh JC
1 , 25300308101 , 31340055100 , 1(Lh 所在第几?)
2 , 12040107100, 31340055100, 1
3 , 12050177000, 12040107100, 2
4 , 12220012000, 24340005100, 2
5 , 24350003100, 24340005100, 2
6 , 12060272100, 24350003100 , 3
7 , 14100015100, 24350003100 , 3
8, 24050113000, 24350003100, 3
9 , ....
怎样用treeview 全部显示它们的树状关系
如:
31340055100 -
|-25300308101
|-12040107100 -
|-12050177000
|-...........
|.......
字串6
2楼: 如何在数据库中提取数据加入到treeview中: 表结构如图 mian sub 录入 商品 录入 话费 查询 综合 查询 分类 建立 根 节点 var Node : TTreeNode ; i : integer ; begin Qry.SQL.Text := ‘select distinct mian from tabel‘; Qry.Open ; while not Qry.Eof do begin TreeView.Items.Add(nil,Qry.FieldByName(‘mian‘).asString); Qry.Next ; end; Qry.Close ; Qry.SQL.Text := ‘select * from table ‘; Qry.Open ; while not Qry.Eof do begin for i := 0 to TreeView.Items.Count - 1 do begin if TreeView.Items[i].Text = Qry.FieldByName(‘mian‘).asString then begin if TreeView.Items[i].Parent = nil then //这是个根节点 begin Treeview.Items.AddChild(TreeView.Items[i],Qry.FieldByName(‘sub‘).asString); Break; end; end; end; Qry.Next ; end; end;字串6
3楼: 可以將代碼給全嗎,學習中!字串4
4楼: // MakeTreeView by jfyes 2005-03-11 procedure TTaiShing.MakeTreeView(DataSet: TDataSet; TreeView1: TTreeView; NodeField: array of string); function ChkItemCount(TV: TTreeView): Boolean; begin // Result := false; Result := true; if TV.Tag = 1 then // 全部过 Result := true else if TV.Tag = 0 then // 过一次 begin // ===========modify by jinfeng 2005-03-24 // 注意这里原来是1后来要加一个,变成2 //Result := TV.Items.Count = 1; //Result := TV.Items.Count = 2; end; end; procedure Update(ParentName, NodeName, Caption: string; Lvl: Integer); var Node, parNode: TTreeNode; I: Integer; parName : string; P: PTreeInfo; begin parNode := nil; New(p); for I := 0 to TreeView1.Items.Count - 1 do begin parName := PTreeInfo(TreeView1.Items[I].Data)^.actno; if parName = ParentName then begin parNode := TreeView1.Items[I]; Break; end end; if parNode <> nil then begin Node := TreeView1.Items.AddChild(parNode, Caption); p^.actno := NodeName; P^.Lvl := Lvl; p^.Level := Node.Level; p^.POSPAR := PTreeInfo(Node.Parent.Data)^.POSPAR; Node.Data:= p; end else if ChkItemCount(TreeView1) then begin Node := TreeView1.Items.AddChild(TreeView1.Selected, Caption); p^.actno := NodeName; P^.Lvl := Lvl; p^.Level := Node.Level; Node.Data:= p; end; end; //end procedure var BookMark: TBookmark; I: Integer; begin if not DataSet.Active then Exit; if DataSet.IsEmpty then Exit; // TreeView1.Items.Clear; //==modify by jinfeng 2005-03-24 TreeView1.ReadOnly := true; if High(NodeField) < 3 then raise Exception.Create(‘树信息结构参数不够‘); for I := Low(NodeField) to High(NodeField) do if NodeField[I] = ‘‘ then Exit; try BookMark := DataSet.GetBookmark; DataSet.First; with DataSet do while not Eof do begin Update(FieldByName(NodeField[0]).AsString, FieldByName(NodeField[1]).AsString, FieldByName(NodeField[2]).AsString, FieldByName(NodeField[3]).AsInteger); Next; end; for I := 0 to TreeView1.Items.Count - 1 do TreeView1.Items.Item[I].Expanded := true; DataSet.GotoBookmark(BookMark); DataSet.FreeBookmark(BookMark); except on E: Exception do E.Create(E.Message); end; end; example TreeView1.Items.Clear; Ev.MakeTreeView(qy_ac_Act, TreeView1, [‘POSPAR‘, ‘actno‘, ‘LName‘, ‘Lvl‘]); 字串7 5楼: type PTreeInfo = ^TTreeInfo; TTreeInfo = record actno: string; POSPAR: string; Level: Integer; Lvl: Integer; end; 字串5 6楼: 类似的一个 Form1.BitBtn1Click(Sender: TObject); var DepNode: TTreeNode;//定义一个暂时存储院系结点的临时变量 Dep: String; { with ADOQuery1 do { Close; Sql.Clear; Sql.Add(‘select distinct Department from StuInfo‘);//查询StuInfo中的所 有院系 open; First; while not Eof do { DepNode := TreeView1.Items.Add(Nil,trim(FieldByName(‘Department‘).AsString));//动态生 成院系结点 with ADOQuery2 do { Dep := Quotedstr(ADOQuery1.FieldByName(‘Department‘).AsString); Close; Sql.Clear; Sql.Add(‘select SNO from StuInfo where Department = ‘ + Dep);//查询属于该院系的所有学生学号 Open; First; while Not Eof do { TreeView1.Items.AddChild(DepNode,trim(FieldByName(‘SNO‘).AsString);//动态 生成该院系里的所有学生的学号结点 Next; } } Next; } } }字串4
7楼: procedure Tshowcontent.LocP_Treevshow(ATreeView: TRzTreeView; ANode: TTreeNode; Atype: string; Awhereshop: string); //显示TreeView中根结点以下的结点信息(部门、货类、货区用到)
var
SqlStr, AddText: string;
Qtemp: TADOQuery;
Level: integer; //显示的级次
LevelLength: integer; //级次的编码长度
CurrentNode: TTreeNode; //当前增加的结点
begin
if Atype <> ‘3‘ then
//LevelLength := LocF_GetCodelength(‘222‘, ANode.Level) 2月26日以前原语句
LevelLength := LocF_GetCodelength(‘222‘, ANode.Level)
else
LevelLength := LocF_GetCodelength(‘22‘, ANode.Level);
Level := ANode.Level + 1;
if Level < 6 then
begin
if Atype = ‘1‘ then //增加货类信息
begin
if LevelLength = 0 then
SqlStr := ‘ select kind_no,kind_name from base_goods_kind‘
+ ‘ where kind_leve = ‘ + inttostr(Level) + ‘ group by kind_no,kind_name‘
else
SqlStr := ‘ select kind_no,kind_name from base_goods_kind‘
+ ‘ where kind_leve = ‘ + inttostr(Level)
+ ‘and substr(kind_no, 1, ‘ + inttostr(LevelLength) + ‘)‘
+ ‘ = ‘ + Quotedstr(Copy(ANode.Text, 1, LevelLength)) + ‘ group by kind_no,kind_name‘
end
else
begin
if Atype = ‘2‘ then //增加货区信息
begin
if LevelLength = 0 then
SqlStr := ‘ select area_no,area_name from base_goods_area‘
+ ‘ where area_leve=‘ + inttostr(Level) + ‘ group by area_no, area_name ‘
else
SqlStr := ‘select area_no,area_name from base_goods_area‘
+ ‘ where area_leve =‘ + inttostr(Level)
+ ‘and substr(area_no, 1, ‘ + inttostr(LevelLength) + ‘)‘
+ ‘ = ‘ + Quotedstr(Copy(ANode.Text, 1, LevelLength)) + ‘ group by area_no, area_name‘
end
else if Atype = ‘3‘ then
begin
if LevelLength = 0 then
begin
{Sqlstr := ‘ select department_no,department_name,employee_shop_no from Base_employee‘ 配送用部门语句
+ ‘ where employee_level=‘ + inttostr(Level) + ‘ and employee_shop_no=‘ + Quotedstr(Awhereshop) + ‘ order by department_no‘ }
SqlStr := ‘ select department_no,department_name from Base_employee‘
+ ‘ where employee_level=‘ + inttostr(Level) + ‘ order by department_no‘
end
else
begin
{Sqlstr := ‘ select department_no, department_name,employee_shop_no from base_employee‘
+ ‘ where employee_level=‘ + inttostr(Level)
+ ‘ and substr(department_no, 1, ‘ + inttostr(LevelLength) + ‘)‘
+ ‘ = ‘ + Quotedstr(Copy(ANode.Text, 1, LevelLength))
+ ‘ and employee_shop_no=‘ + Awhereshop + ‘ group by department_no,department_name,employee_shop_no ‘;}//配送用部门信息
SqlStr := ‘ select department_no, department_name from base_employee‘
+ ‘ where employee_level=‘ + inttostr(Level)
+ ‘ and substr(department_no, 1, ‘ + inttostr(LevelLength) + ‘)‘
+ ‘ = ‘ + Quotedstr(Copy(ANode.Text, 1, LevelLength))
+ ‘ group by department_no,department_name ‘;
end;
end;
end;
end;
//if Awhereshop <> ‘‘ then
// Sqlstr := Sqlstr + Awhereshop;
Qtemp := GetCommQuery;
try
OpenSql(Qtemp, SqlStr);
//if Qtemp.RecordCount > 0 then 2月26日原来语句
if (Qtemp.RecordCount > 0) and (LevelLength = 0) then
begin
Qtemp.First;
while not Qtemp.Eof do
begin
//向树增加内容,根据 LevelLength判断级别
AddText := Trim(Qtemp.Fields[0].AsString) + ‘--‘ + Trim(Qtemp.Fields[1].AsString);
CurrentNode := ATreeView.Items.AddChild(ANode, AddText);
LocP_Treevshow(ATreeView, CurrentNode, Atype, Awhereshop);
Qtemp.Next;
end;
end;
finally
FreeCommQuery(Qtemp);
end;
这是我的例子,当然表不一样,但都是一个道理 字串7
8楼: 謝謝了字串2