当前位置:主页>delphi7/进销存和数据库> 文章内容

treeview 问题急!!!

发布时间:2010-01-21 | QQ免费站
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