第一层节点能加上去
第二层节点总是加不上去
还提示: table read only
表结构:部门表:GRPID、GRPNAME
员工表:CODE,NAME,GRPID添加第一层节点的代码:
procedure TFrm_KernelPurView.Button1Click(Sender: TObject);
var
node : TTreeNode; i : integer;
s : string;
begin
inherited;
with query1 do
begin
close;
sql.Clear;
sql.Add('SELECT GRPID,GRPNAME FROM SYSGROUP');
open;
end;
s := query1.fieldbyname('grpname').AsString;
treeview1.Items.Clear;
for i := 0 to query1.RecordCount - 1 do
begin
treeview1.Items.Add(nil,s);
next;
end;
treeview1.Items[0].HasChildren := true;
end;第二层:
procedure TFrm_KernelPurView.TreeView1Expanding(Sender: TObject;
Node: TTreeNode; var AllowExpansion: Boolean);
var
i : integer;
begin
inherited;
with query2 do
begin
close;
sql.Clear;
sql.Add('SELECT A.GRPNAME,B.NAME FROM SYSGROUP A,SYSUSER B WHERE A.GRPID = B.GRPID');
open;
end;
for i := 0 to query2.RecordCount -1 do
begin
treeview1.Items.AddChild(node,query2.fieldbyname('name').AsString);
next;
end;
end;
第二层节点总是加不上去
还提示: table read only
表结构:部门表:GRPID、GRPNAME
员工表:CODE,NAME,GRPID添加第一层节点的代码:
procedure TFrm_KernelPurView.Button1Click(Sender: TObject);
var
node : TTreeNode; i : integer;
s : string;
begin
inherited;
with query1 do
begin
close;
sql.Clear;
sql.Add('SELECT GRPID,GRPNAME FROM SYSGROUP');
open;
end;
s := query1.fieldbyname('grpname').AsString;
treeview1.Items.Clear;
for i := 0 to query1.RecordCount - 1 do
begin
treeview1.Items.Add(nil,s);
next;
end;
treeview1.Items[0].HasChildren := true;
end;第二层:
procedure TFrm_KernelPurView.TreeView1Expanding(Sender: TObject;
Node: TTreeNode; var AllowExpansion: Boolean);
var
i : integer;
begin
inherited;
with query2 do
begin
close;
sql.Clear;
sql.Add('SELECT A.GRPNAME,B.NAME FROM SYSGROUP A,SYSUSER B WHERE A.GRPID = B.GRPID');
open;
end;
for i := 0 to query2.RecordCount -1 do
begin
treeview1.Items.AddChild(node,query2.fieldbyname('name').AsString);
next;
end;
end;
解决方案 »
- 讨论一下:COM+中的全局变量
- 我客戶端是ado2.8,服務器上是SQL2000,ado2.7,是否對客戶端有什麼影響?
- 急,关于DBGIRDEH中怎么用下拉列表啊?
- 设置了Timer的enabled为true后,为什么还不执行onTimer事件?
- 关于加密的问题,来者有分!
- 艳艳又有问题要解决了,请各位帮忙
- 一个关于quickrep1的问题,希望可以得到大家的帮助!
- 关于delphi的前途问题!!!!(来者有分!)
- 高分求助,能不能通過internet,直接向對方發送消息,兩方都是win2000.
- 急!!!关于delphi 3的报表打印!!!20分!!!
- 将adoquery中的数据导入excel文件,使用QueryTables,有问题???
- 指针问题
来实现添加过程。以下是我的代码片断:procedure TfrmMainForm.AddChildFolderToTree(Node: TTreeNode);
var
i :integer;
tmpNode :TTreeNode;
begin
...
tmpNode := TreeView.Items.AddChild(Node, tmpFolder.Name);
tmpNode.Data := tmpFolder;
tmpNode.ImageIndex := tmpFolder.ImageIndex;
tmpNode.SelectedIndex := tmpFolder.SelectIndex;
AddChildFolderToTree(tmpNode);
...
end;
var
pCode, yCode, pName: string;
MainNode, yNode, zNode,aNode,bNode,cNode,dNode,eNode,fNode,gNode,hNode,oNode: TTreeNode;
begin
MainNode := TTreeNode.Create(DqmlView.Items);
yNode := TTreeNode.Create(DqmlView.Items);
zNode := TTreeNode.Create(DqmlView.Items);
DqmlView.Items.Clear;
MainNode := DqmlView.Items.AddChild(nil, '所有仓库');
oNode := MainNode;
with ADOQuery_ml do
begin
Close;
SQL.Clear;
SQL.Text:='Select StoreID,StoreName From ESMStore order by StoreID ' ;
Open;
end;
ADOQuery_ml.First;
yCode := Trim(ADOQuery_ml.FieldByName('StoreID').AsString);
DqmlView.Items.BeginUpdate;
while not ADOQuery_ml.Eof do
begin
pCode := Trim(ADOQuery_ml.FieldByName('StoreID').AsString);
pName := Trim(ADOQuery_ml.FieldByName('StoreName').AsString);
case Length(pCode) of
3:begin //第一层
MainNode := DqmlView.Items.AddChild(oNode, pCode + ' ' + pName);
yNode := MainNode;
end;
6:begin //第二层
pCode := Copy(pCode, 4, 3);
MainNode := DqmlView.Items.AddChild(yNode, pCode + ' ' + pName);
zNode := MainNode;
end;
9:begin //第三层
pCode := Copy(pCode, 7, 3);
MainNode := DqmlView.Items.AddChild(zNode, pCode + ' ' + pName);
aNode:=MainNode;
end;
12:begin //第四层
pCode := Copy(pCode, 10, 3);
MainNode := DqmlView.Items.AddChild(aNode, pCode + ' ' + pName);
bNode:=MainNode;
end;
15:begin //第五层
pCode := Copy(pCode, 13, 3);
MainNode := DqmlView.Items.AddChild(bNode, pCode + ' ' + pName);
cNode:=MainNode;
end;
18:begin //第六层
pCode := Copy(pCode, 16, 3);
MainNode := DqmlView.Items.AddChild(cNode, pCode + ' ' + pName);
dNode:=MainNode;
end;
21:begin //第七层
pCode := Copy(pCode, 19, 3);
MainNode := DqmlView.Items.AddChild(dNode, pCode + ' ' + pName);
eNode:=MainNode;
end;
24:begin //第八层
pCode := Copy(pCode, 22, 3);
MainNode := DqmlView.Items.AddChild(eNode, pCode + ' ' + pName);
fNode:=MainNode;
end;
27:begin //第九层
pCode := Copy(pCode, 25, 3);
MainNode := DqmlView.Items.AddChild(fNode, pCode + ' ' + pName);
gNode:=MainNode;
end;
30:begin //第十层
pCode := Copy(pCode, 28, 3);
MainNode := DqmlView.Items.AddChild(gNode, pCode + ' ' + pName);
hNode:=MainNode;
end;
end;
Mainnode.SelectedIndex := 16;
Mainnode.ImageIndex := 17;
ADOQuery_ml.Next;
end;
DqmlView.Items.EndUpdate;
if DqmlView.Items.Count > 1 then
begin
DqmlView.Items[0].Item[0].Selected := True;
DqmlView.OnClick(Sender);
end
else
begin
DqtjaddButton.Enabled := False;
DqDeleteButton.Enabled := False;
end;
pClearEdit;//清空数据
BitBtnsave.Enabled:=False;
BitBtn1.Enabled:=False;
Panel3.Enabled:=False;
end;
->
treeview1.Items[0].AddChild(node,query2.fieldbyname('name').AsString);
var
Root ,pNode , cNode : TTreeNode;
pPoint : Pdepartment;
vIndex : Integer;
begin
//
TreeView1.Items.Clear;
Root := TreeView1.Items.AddFirst(Nil,FUnitName);
OpenDataSet('0');
pNode := Root;
ComboBox1.Clear;
if DataModuleFrm.TempADOQuery.RecordCount <> 0 then
begin
while Not DataModuleFrm.TempADOQuery.Eof do
begin
New(pPoint);
pPoint.Name := DataModuleFrm.TempADOQuery.FieldByName('department_Name').AsString;
pPoint.Code := DataModuleFrm.TempADOQuery.FieldByName('Department_Code').AsString;
cNode := TreeView1.Items.AddChild(pNode ,pPoint.Name);
cNode.Data := pPoint;
DataModuleFrm.TempADOQuery.Next;
ComboBox1.Items.Add(pPoint.Name);
end;
end; if TreeView1.Items.Count <> 1 then
begin
pNode := Root.getFirstChild;
for vIndex := 0 to Root.Count do
begin
OpenDataSet(pdepartment(pNode.Data).Code);
if DataModuleFrm.TempADOQuery.RecordCount <> 0 then
begin
while Not DataModuleFrm.TempADOQuery.Eof do
begin
New(pPoint);
pPoint.Name := DataModuleFrm.TempADOQuery.FieldByName('department_Name').AsString;
pPoint.Code := DataModuleFrm.TempADOQuery.FieldByName('Department_Code').AsString;
cNode := TreeView1.Items.AddChild(pNode,pPoint.Name);
cNode.Data := pPoint;
DataModuleFrm.TempADOQuery.Next;
end;
pNode := PNode.getNextSibling;
if pNode = Nil then
Exit;
end;
end;
end;end;}以前写的。
var
node : TTreeNode;
i : integer;
s : string;
begin
inherited;
with query1 do
begin
close;
sql.Clear;
sql.Add('SELECT GRPID,GRPNAME FROM SYSGROUP');
open;
end;
s := query1.fieldbyname('grpname').AsString;
treeview1.Items.Clear;
for i := 0 to query1.RecordCount - 1 do
begin
Node := treeview1.Items.Add(nil,s);
with query2 do
begin
close;
sql.Clear;
sql.Add('SELECT A.GRPNAME,B.NAME FROM SYSGROUP A,SYSUSER B WHERE A.GRPID = B.GRPID');
open;
end;
for i := 0 to query2.RecordCount -1 do
begin
treeview1.Items.AddChild(node,query2.fieldbyname('name').AsString);
next;
end;
next;
end;end;