我有一个表如下: 编号 父类别 子类别
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时,又回到原来的那个,怎样解决????
解决方案 »
- delphi执行外部程序等待程序运行成功,而不是程序退出
- delphi程序多台机器同时访问sql server数据库问题?
- DLL释放问题(DLL中使用了Raize控件)
- 送分了,请问个位高手tqrcompositereport如何使用
- ole拖动
- 为什么是同一个连接啊??(在线等待。大家来看看吧)
- 我怎样能将DELPHI的错误忽略掉,象VB的 ON ERROR RESUME NEXT 一样?
- 关于dxdbgrid的使用.
- form与frame有什么区别?
- 如何检测是否已经插上网卡、网卡是否正常工作(包括是否正确安装了驱动程序)
- 急!在线等待!高分相送!谁知道dbgrid某些事件?
- 将edit1.text里输入的单引号(‘)换成双引号(“”) 怎么写??
另一个贴子是:
http://expert.csdn.net/Expert/topic/1508/1508925.xml?temp=.9451105
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;