我做的是3层的树结构,怎么跟表做关联呢?就是鼠标选中树的一项,在表中相应的显示,我是菜鸟,高手帮帮忙啊!!多谢了!
解决方案 »
- 在Delphi中做图片的打印预览
- 过年了,祝D版的兄弟伙,拿到一个大红包。 还有我想问问做一个出色产品经理应该从什么地方开始!
- 已知屏幕上的三个点(三角形的三个坐标点):求角平分线上的点的坐标
- 如何把DBgrid中的数据传到office中的excel去
- 大家看看,这个函数中对rQueryResp指针的操作会不会引起内存的读写错误?
- 如何在DELPHI中定义一个可变的二唯数组???救命啊!!!!!!!!
- 三层结构客户端调用ApplyUpdate(-1)有问题
- 中文如何做密码?
- 百分求教!如何用编辑TdbgridEh控件中的memo(备注)字段。
- DBGridEh 中 Picklist 行高
- 数据表保存的问题?在线等!
- 控件编写问题...在线等待!!!小女子急!
主要就是在
procedure TFrmRole.TreeExpanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
begin
GetClass(Node);
AllowExpansion:=True;
end;
写东西,刷新ClientDataSet!
var
Flag:Boolean;
I:Integer;
begin
inherited;
GoodOrgDataSet.Data:=Null;
GoodOrgparentDataSet.Data:=Null;
ShowTopGrid;
Flag:=True; { has distributed Organ_ID's Role? *@-@ Snake_Eye}
if (Tree.Selected.Level=0) then
begin
GoodOrgparentDataSet.First;
while not GoodOrgparentDataSet.Eof do
begin
if (GoodOrgparentDataSet.FieldByName('ROLE_MAX_NUM').AsInteger)=0 then
begin
Flag:=False;
Break;
end;
GoodOrgparentDataSet.Next
end;
end;
if Flag then
begin
ShowGrid;
end
else
GoodOrgDataSet.Active:=False;
if (Tree.Selected.Level=0) and (not Flag) then
StaticText2.Caption:='[请先分配'+Trim(Copy(Tree.Selected.Text,Pos(' ',Tree.Selected.Text),255))+'的角色]'; PraentGridDBTableView1.ClearItems;
cxGridDBTableView1.ClearItems;
PraentGridDBTableView1.DataController.CreateAllItems;
cxGridDBTableView1.DataController.CreateAllItems; if (not VarIsNull(GoodOrgparentDataSet.Data)) and (not VarIsEmpty(GoodOrgparentDataSet.Data)) then
begin
for I:=0 to GoodOrgparentDataSet.FieldCount-1 do
PraentGridDBTableView1.Columns[I].Options.Editing:=False;
if Tree.Selected.Level=0 then
PraentGridDBTableView1.Columns[4].Options.Editing:=True;
PraentGridDBTableView1.Columns[4].Styles.Header:=stSnake;
end; if (not VarIsNull(GoodOrgDataSet.Data)) and (not VarIsEmpty(GoodOrgDataSet.Data)) then
begin
for I:=0 to GoodOrgDataSet.FieldCount-1 do
cxGridDBTableView1.Columns[I].Options.Editing:=False;
cxGridDBTableView1.Columns[2].GroupIndex:=1;
cxGridDBTableView1.Columns[4].Styles.Header:=stSnake;
cxGridDBTableView1.Columns[4].Options.EditIng:=True;
cxGridDBTableView1.Columns[2].Visible:=False;
cxGridDBTableView1.DataController.Groups.FullExpand;
end;
{Setting Save Button @-@*Snake_Eye}
if Tree.Selected.Level=0 then
SaveParent.Enabled:=true
else
SaveParent.Enabled:=False;end;
var
lnode,lnode1,lnode2:TTreeNode;
i,j,lfloorcount,lunitcount:integer; Function GetSqlWhere(lNode:TTreeNode):string;
var
lNode1:TTreeNode;
lstrwhere:string;
lendPos:integer;
begin
lNode1:=lNode;
lstrwhere:=' 1=1 ';
result:='';
while lNode1<>nil do
begin
lendPos:=pos('号楼',lNode1.Text);
if lendpos>0 then
lstrwhere:=lstrwhere+' and '+' FLOORNO='''+Copy(lNode1.Text,1,lendpos-1)+'''';
lendPos:=pos('单元',lNode1.Text);
if lendpos>0 then
lstrwhere:=lstrwhere+' and '+' CELL='''+Copy(lNode1.Text,1,lendpos-1)+'''';
lendPos:=pos('宿舍',lNode1.Text);
if lendpos>0 then
lstrwhere:=lstrwhere+' and '+' DORMITORY='''+Copy(lNode1.Text,1,lendpos-1)+'''';
lNode1:=lNode1.Parent;
end;
if lstrwhere<>'1=1' then result:=' where '+lstrwhere
else result:='';
end;
procedure nodechild(lnode:TTreenode;level:integer);
var
lNode1:TTreeNode;
i:integer;
lsql,ltext,lsqlwhere:string;
begin
with DataModule1.ADOQuery_Temp do
begin
Active:=false;
Sql.Clear;
lsql:='';
case level of
1:begin
lsql:=' select distinct(FLOORNO)';
ltext:='号楼';
end;
2:begin
lsql:=' select distinct(CELL)';
ltext:='单元';
end;
3:begin
lsql:=' select distinct(DORMITORY)';
ltext:='宿舍';
end;
end;
lsql:=lsql+' from GYGL_SSQK';
if lnode<>nil then
begin
lsqlwhere:=GetSqlWhere(lNode);
if lsqlwhere<>'' then
Sql.Add(lsql+lsqlwhere)
else exit;
end
else Sql.Add(lsql);
Active:=true;
if (RecordCount<=1) and (Fields[0].asstring='') then exit;
lNode1:=lNode;
First;
lNode1:=TreeView1.Items.AddChild(lNode1,Fields[0].asstring+ltext);
Next;
for i:=1 to RecordCount-1 do
begin
lNode1:=TreeView1.Items.Add(lNode1,Fields[0].asstring+ltext);
Next;
end;
end;
end;
begin
lNode:=nil;
nodechild(lnode,1);
lfloorcount:=TreeView1.Items.Count;
lnode:=TreeView1.Items.GetFirstNode;
for i:=0 to lfloorcount-1 do
begin
lnode1:=lnode;
nodechild(lnode1,2);
lunitcount:=lnode.Count;
if lunitcount<=0 then
begin
lnode1:=lnode;
lnode2:=lnode1;
nodechild(lnode2,3);
end
else
lnode1:=lnode.getFirstChild;
for j:=0 to lunitcount-1 do
begin
lnode2:=lnode1;
nodechild(lnode2,3);
lNode1:=lNode1.getNextSibling;
end;
lNode:=lNode.getNextSibling;
end;
end;