在treeview的展开事件根据数据库中相应数据初使化节点,取父节点的值时通不过,以下代码中带“?”的一处语句为通不过的语句
procedure TForm1.TreeView1Expanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
var
GroupId:integer;
RecordNode:TTreeNode;
PtrMyData:PpMyData;
RecordName:string;
begin
if(node.Parent<>nil)and(node.Parent.Text='通讯录') then
begin
node.getFirstChild.Delete;
//
GroupId:=(PMydata(node.Data))^.id;//?
//GroupId:=recordnode.Level;
with adoquery1 do
begin
sql.Clear;
sql.Add('select txl_map.record_id,txl_record.name');
sql.Add('from txl_map,txl_record');
sql.Add('where txl_map.group_id='+inttostr(GroupId));
sql.Add('and txl_map.record_id=txl_record.id');
open;
while not eof do
begin
recordname:=fieldbyname('name').AsString;
new(PtrMydata);
PtrMydata.Id:=fieldbyname('record_id').AsInteger;
PtrMydata.NodeType:=1;//记录节点
recordnode:=TreeView1.items.addchildobject(node,recordname,ptrmydata);
recordnode.ImageIndex:=2;
recordnode.SelectedIndex:=2;
next;
end;
close;
end;
end;
end;
procedure TForm1.TreeView1Expanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
var
GroupId:integer;
RecordNode:TTreeNode;
PtrMyData:PpMyData;
RecordName:string;
begin
if(node.Parent<>nil)and(node.Parent.Text='通讯录') then
begin
node.getFirstChild.Delete;
//
GroupId:=(PMydata(node.Data))^.id;//?
//GroupId:=recordnode.Level;
with adoquery1 do
begin
sql.Clear;
sql.Add('select txl_map.record_id,txl_record.name');
sql.Add('from txl_map,txl_record');
sql.Add('where txl_map.group_id='+inttostr(GroupId));
sql.Add('and txl_map.record_id=txl_record.id');
open;
while not eof do
begin
recordname:=fieldbyname('name').AsString;
new(PtrMydata);
PtrMydata.Id:=fieldbyname('record_id').AsInteger;
PtrMydata.NodeType:=1;//记录节点
recordnode:=TreeView1.items.addchildobject(node,recordname,ptrmydata);
recordnode.ImageIndex:=2;
recordnode.SelectedIndex:=2;
next;
end;
close;
end;
end;
end;
type
pPMyData=^PMyData; //定义指针
PMyData=Record //定义记录
Id:integer;
NodeType:integer;
end;
var
GroupId:integer;
RecordNode:TTreeNode;
PtrMyData:PpMyData;
RecordName:string;
begin
if(node.Parent<>nil)and(node.Parent.Text='通讯录') then
begin
node.getFirstChild.Delete;
//需要测试这个节点是否存放了指针哦,如果为空就跳过。
if Node.Data = nil then Exit;
GroupId:=(PMydata(node.Data))^.id;//?
//GroupId:=recordnode.Level;
with adoquery1 do
begin
GroupId:=(PMydata(node.Data))^.id;//?