我有一个表如下: 编号 父类别 子类别
T001 BBBB bbbbbb
T002 BBBB dddddd
T003 CCCC cccccc
T004 CCCC eeeeee我想在TreeView里而显示上面那个表。 +BBBB
| |---bbbbbb
| |---dddddd
|
+CCCC
|---cccccc
|---eeeeee单我双击cccccc时,就打开另一个表中编号为T004的所有资料。
请问,我应该用什么来放这个[编号]好?怎样与那个[子类别]关联起来?
编号是不可能重复的,但,那个了类别有可能重复,所以不能用子类别来查询。 用数组吗?数组的下标怎样与[子类别]的item关联起来? 应该用到TreeView联系起来?我知道TreeView的每个Items里面有data属性,可以放指针,不是,我对这个指针不熟。请问我该怎样用?另外,TreeView点右键选中那个项之后,当MouseUp时,又回到原来的那个,怎样解决????
T001 BBBB bbbbbb
T002 BBBB dddddd
T003 CCCC cccccc
T004 CCCC eeeeee我想在TreeView里而显示上面那个表。 +BBBB
| |---bbbbbb
| |---dddddd
|
+CCCC
|---cccccc
|---eeeeee单我双击cccccc时,就打开另一个表中编号为T004的所有资料。
请问,我应该用什么来放这个[编号]好?怎样与那个[子类别]关联起来?
编号是不可能重复的,但,那个了类别有可能重复,所以不能用子类别来查询。 用数组吗?数组的下标怎样与[子类别]的item关联起来? 应该用到TreeView联系起来?我知道TreeView的每个Items里面有data属性,可以放指针,不是,我对这个指针不熟。请问我该怎样用?另外,TreeView点右键选中那个项之后,当MouseUp时,又回到原来的那个,怎样解决????
另一个贴子是:
http://expert.csdn.net/Expert/topic/1508/1508939.xml?temp=.6674463
function GetParentNode(s: string): TTreeNode;
var i: Integer;
begin
with TreeView1 do
for i := 0 to Items.Count - 1 do
if (Items[i].Level = 0) and (Items[i].Text = s) then begin
Result := Items[i];
Exit;
end;
Result := nil;
end;
var tNode: TTreeNode;
begin
NoList := TStringList.Create;
TreeView1.Items.Clear;
Table1.First;
with Table1 do
while not Eof do begin
tNode := GetParentNode(FieldByName('Parent').AsString);
if tNode = nil then
tNode := TreeView1.Items.AddChild(nil, FieldByName('Parent').AsString);
tNode := TreeView1.Items.AddChild(tNode, FieldByName('Child').AsString);
NoList.Add(FieldByName('No').AsString); // 保存编号
tNode.Data := Pointer(NoList.Count-1); // 保存编号位置在结点中
Next;
end;
end;procedure TForm1.TreeView1DblClick(Sender: TObject);
begin
// 双击子类时取得编号
if TreeView1.Selected.Level = 1 then
ShowMessage(NoList[Integer(TreeView1.Selected.Data)]);
end;procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
// 鼠标右键选中当前的结点
if Button = mbRight then begin
TreeView1.GetNodeAt(X, Y).Selected := True;
end;
end;