我现在想把数据库中某个表的数据按不同层次在tree中显示出来,
并且点击其中的某条数据显示其详细信息。
并且点击其中的某条数据显示其详细信息。
解决方案 »
- vclSkin给通过Dll动态创建的窗体换肤的问题,请有过相关经验的赐教!
- 100分求fastreport3.0以上原代码。
- 如何最小化窗体
- 对我来说比较困难的问题!求助
- 怎样自己控制窗体的消息循环,例如在其中“吃掉”发给某个控件的鼠标消息?
- 动态库问题。请高手指点。谢了先
- 关于StringGrid的问题
- 另类的字符串表达方式,“^:^3^7^!^.^'”,Delphi程序员必读
- 请问那位知道如何将Delphi中的指针型变量转成字符串变量!
- 问一下非常简单的问题,别取笑
- 如何将文件的内容以二进制的形式存储进SQL SERVER数据库?
- 谁能告诉我在那里可以下载到[李维]的Delphi.X系列丛书???
type
PNodeData = ^TNodeData;
TNodeData= record
Code: String;
Dese: String;
end;//TempBit:String='0102030405060708',表的第一个字缎的编码规则为'00010203045...',你可以根据具体情况适当改变本程序以适应新的编码规则
procedure ConStructTreeFromProg(Tree:Ttreeview;DataSet:TDataSet;TempBit:String);
Var
OldState:Boolean;
Code,Desc:String;
Begin
OldState:=DataSet.Active;
IF DataSet.Active=False THEN DataSet.Active:=True;
IF Tree.Items.Count=0 Then Tree.Items.Add(nil,'信息管理系统主菜单');
DataSet.First;
Tree.Items.BeginUpdate;
While not DataSet.EOF do
Begin
Code:=DataSet.Fields[0].AsString;
Desc:=DataSet.Fields[1].AsString;
ConStructTreeFromCode(Tree,code,desc,TempBit);
DataSet.Next;
End;
Tree.Items.EndUpdate;
DataSet.Active:=OldState;
End;//根据纪录应该放在那一层而生成相应的树节点,第一层直接添加,如果不是,则需找该纪录的父结点
Procedure ConStructTreeFromCode(Tree:TtreeView;code,desc,TempBit:String);
Var
Level:integer;
Nd:TTreeNode;
Ptr:PNodeData;
Begin
New(Ptr);
Ptr^.Code:=Code;
Ptr^.Dese:=Desc;
Level:=GetNodeLevel(Code,Desc,TempBit);
IF Level=1 Then
Begin
Nd:=Tree.Items.GetFirstNode;
Tree.Items.AddChildObject(Nd,desc+'('+Code+')',Ptr);
End
Else IF FindParentNode(Tree,Level,Code,TempBit)<>nil Then
Begin
Nd:=FindParentNode(Tree,Level,Code,TempBit);
Tree.Items.AddChildObject(Nd,desc+'('+Code+')',Ptr);
End
Else
Exit;
end;//判断是纪录应该生成在那一层
Function GetNodeLevel(Code,Desc,TempBit:String):Integer;
Begin
Result:=StrtoInt(copy(TempBit,Length(Code),1));
end;//寻找那个是相应的父结点
Function FindParentNode(Tree:TtreeView;Level:Integer;Code,TempBit:String):TtreeNode;
var
ParentCode:String;
i:Integer;
NodeInfo:PNodeData;
Begin
ParentCode:=Copy(code,1,Pos(inttostr(Level-1),TempBit));
for i:=1 to Tree.Items.Count-1 do
begin
NodeInfo:=Tree.Items[i].Data;
IF NodeInfo^.Code=ParentCode Then
Begin
Result:=Tree.items[i];
Exit;
End
Else
Continue;
end;
Result:=nil;
end;//如果你要点击其中的某条数据显示其详细信息。
procedure Tform1.Treeview1Change(Sender: TObject; Node: TTreeNode);
var
nodeInfo:PNodeData;
begin
IF Treeview1.Selected<>nil Then
Begin
If Treeview1.Selected.Data<>nil then
Begin
with TQuery.Create(nil) do
Begin
DataBaseName:='你的数据库别名';
Sql.Clear;
Sql.Add('Select 列名1,列名2 from 表名 Where 编码的列=:code);
Params[0].Value:=PNodeData(Data)^.Code;
Open;
Edit1.Text:=Trim(Fields[0].AsString);
Edit2.Text:=Trim(Fields[1].AsString);
....
Free;
End;
End;
end;
end;该程序并不是一成不变的,关键要注意你的数据表的负责编码的字段和TempBit变量的运用