请问用代码如何实现TreeView和cxDBGrid的几个功能?100分奉上,谢谢!
用TreeView实现了下面的一个树
|+-公司XP
| +--行政部
| +--人员XYZ
| +--人员XPX
| +--技术部
| +--人员X342
| +--人员DOUP
| +--人员FDFS
|+-公司VV
| +--行政部
| +--人员AYZ
| +--人员CPX
| +--技术部
| +--人员X342
| +--人员DOUP
| +--人员FDFS
| +--财务部
| +--人员X32
| +--人员D23P
| +--人员F23S表结构
{
公司名 VARCHAR(100),
部门名 VARCHAR(100),
员工名 VARCHAR(100)
}我把这个表用cxDBGrid显示内容:公司名 部门名 员工名
------------------------------
公司XP 行政部 人员XYZ
公司XP 行政部 人员XPX
......
公司VV 行政部 人员AYZ
......
现在我想
1. 如何用TreeView实现了上面的树;
2. 如何点击TreeView和各级节点时,实现在cxDBGrid中对应公司名、部门名的过虑;
2. 在选中cxDBGrid的一条记录时,树中对应的公司名、部门名、员工名也处于选中状态。请问用代码如何实现?100分奉上,谢谢!
用TreeView实现了下面的一个树
|+-公司XP
| +--行政部
| +--人员XYZ
| +--人员XPX
| +--技术部
| +--人员X342
| +--人员DOUP
| +--人员FDFS
|+-公司VV
| +--行政部
| +--人员AYZ
| +--人员CPX
| +--技术部
| +--人员X342
| +--人员DOUP
| +--人员FDFS
| +--财务部
| +--人员X32
| +--人员D23P
| +--人员F23S表结构
{
公司名 VARCHAR(100),
部门名 VARCHAR(100),
员工名 VARCHAR(100)
}我把这个表用cxDBGrid显示内容:公司名 部门名 员工名
------------------------------
公司XP 行政部 人员XYZ
公司XP 行政部 人员XPX
......
公司VV 行政部 人员AYZ
......
现在我想
1. 如何用TreeView实现了上面的树;
2. 如何点击TreeView和各级节点时,实现在cxDBGrid中对应公司名、部门名的过虑;
2. 在选中cxDBGrid的一条记录时,树中对应的公司名、部门名、员工名也处于选中状态。请问用代码如何实现?100分奉上,谢谢!
解决方案 »
- 请教:如何将ADOQuery查询出来的结果双击后进行修改,修改后可以更新到原数据表中(原表未设主键)?
- 金蝶数据库命名规范是什么
- 关于excel文件打开的问题
- 谁熟悉miniGUI编程?好学吗?
- 我用LISTVIEW显示一条数据记录,但一点击就不见了,什么原因?
- 如何在windows2000中快速清除打印作业???来者有分
- 如何用D6来画一个箭头,就象数据流程图中的箭头那样!(急)
- 如何做2个bmp的交替闪烁?
- 类库问题
- 请教web分布式服务数据流程
- 我想在一个类似memo里显示不同字体和不同颜色的控件
- 手里有d版的delphi7和delphi2006,开发网络版带报表的数据库win32程序,哪个版本好?
var
ANode:TTreeNode;
PData:PRec;//数据指针
I:Integer;
TempFun:Integer;
P:^string;
begin
{ Place thread code here }
FTree.Items.Clear;
try
Qry_Data.Close;
Qry_Data.SQL.Clear;
Qry_Data.SQL.Text:='SELECT * from T_model order by functionid';
Qry_Data.Open;
//*************添加节点****************//
while not Qry_Data.Eof do
begin
New(PData);//分配指针内存
PData^.FunctionID :=Qry_Data.FieldByName('FunctionID').AsInteger;
PData^.ModelName :=Qry_Data.FieldByName('ModelName').AsString;
PData^.ModelType :=Qry_Data.FieldByName('ModelType').AsInteger;
PData^.ParentID :=Qry_Data.FieldByName('ParentID').AsInteger;
PData^.ImageIndex :=Qry_Data.FieldByName('ImageIndex').AsInteger;
if Qry_Data.FieldByName('ParentID').AsInteger=0 then //创建根节点
begin
ANode:=FTree.Items.AddObject(nil,Qry_Data.FieldByName('ModelName').AsString,PData);
ANode.ImageIndex:=PData^.ImageIndex;
ANode.SelectedIndex:=PData^.ImageIndex+1;
Qry_Data.Next;
end else
begin
ANode:=FindParent(PData^.ParentID,FTree);
if ANode<>nil then
begin
ANode:=FTree.Items.AddChildObject(ANode,Qry_Data.FieldByName('ModelName').AsString,PData);
ANode.ImageIndex:=PData^.ImageIndex;
ANode.SelectedIndex:=PData^.ImageIndex+1;
end;
Qry_Data.Next;
end;
end;
//以上代码加载所有菜单项
if G_UserType=0 then //管理员
begin
FTree.ReFresh;
Exit;
end;
Qry_Data.Close;
Qry_Data.SQL.Clear;
Qry_Data.SQL.Text:='select a.* from T_Model a,T_UserRight b where a.functionid=b.functionid and b.UserType='''+InttoStr(G_UserType)+''' and a.Modeltype=1 union all select * from T_Model where Modeltype=0';
Qry_Data.Open;
Qry_Data.First;
while not Qry_Data.Eof do
begin
New(P);
P^:= Qry_Data.FieldByName('FunctionID').AsString;
G_FunctionIDList.Add(P);
Qry_Data.Next;
end; I:=FTree.Items.Count-1;
while(I>=0) do
begin
TempFun:=PRec(FTree.Items.Item[I].Data)^.FunctionID;
if (not Qry_Data.Locate('FunctionID',TempFun,[loCaseInsensitive])) and (not FTree.Items.Item[I].HasChildren) then
begin
FTree.Items.Item[I].Delete;
end;
Dec(I);
end;
except
ShowMessage('加载树出错!');
end;
FTree.ReFresh;
end;
item^.ClassId := q.fieldbyname('class_id').asinteger;
item^.ClassName := ClassName;
item^.ClassLevel := ClassLevel;
item^.PClassId := PClassId;
node := tvClass.Items.AddChild(pNode, ClassName);
node.Data := item;
tvClass.Selected := node;上面比较详细了