代码正确,有待优化 UnitClass 表结构 ------------------------------------------------- CUnitClassCode Varchar 10 CUnitClassName Varchar 20 IUCGrade Int 1 Bend Bit -------------------------------------------------///////////////////////////////////// //节点第一次刷新过程 ////////////////////////////////////procedure Tfrm_ClientMain.node_first_fresh; var treenode : tfctreenode; fstr : string; bint : integer; ibegin : integer; i : integer; level_tmp : integer;begin if frm_clientmain.fctreeview1.Enabled = false then frm_clientmain.fctreeview1.enabled := true; fctreeview1.items.clear; treenode := fcTreeView1.items.add(nil,'单位分类'); statusbar1.Panels[0].Text := '所选类名为:'+'单位分类'; node_text := '单位分类'; treenode.ImageIndex := 0 ; if treenode = fcTreeView1.Items[0] then treenode.ImageIndex := 0 ; if cds_unitclass.IsEmpty = false then begin cds_unitclass.First; fstr := trim(cds_unitclass.FieldByName('cunitclasscode').asstring)+' '+ trim(cds_unitclass.fieldbyname('cunitclassname').asstring); if treenode = fcTreeView1.Items[0] then treenode.ImageIndex := 0 ; while not cds_unitclass.Eof do begin bint := cds_unitclass.FieldByName('igrade').value; if ((bint = 1) = true) then begin treenode := fcTreeView1.Items[0]; treenode.ImageIndex := 0; treenode := fcTreeView1.items.addchild(treenode,fstr); treenode.ImageIndex := 1; end;//一级类判断结束 if ((bint <> 1) = true) then begin treenode := fctreeview1.Items.addchild(treenode,fstr); treenode.imageindex := 1; end; level_tmp := treenode.Level; cds_unitclass.Next; ibegin := cds_unitclass.FieldValues['igrade']; if ibegin = level_tmp then begin treenode := treenode.Parent; treenode.ImageIndex := 1; end else begin for i := 0 to (level_tmp -ibegin) do begin treenode := treenode.parent; treenode.ImageIndex := 1; end; end; fstr := trim(cds_unitclass.FieldByName('cunitclasscode').asstring)+' ' + trim(cds_unitclass.fieldbyname('cunitclassname').asstring); end;//结束数据list循环 end else begin node_text := '单位分类'; exit; //如果 UnitClass 无纪录,退出节点刷新过程 end; //如果 UnitClass 无纪录,退出节点刷新过程end; //////////////////////////////////////////////////// //点击节点,定位 FB_UnitClass 表中的纪录 ////////////////////////////////////////////////////procedure Tfrm_ClientMain.fcTreeView1GetImageIndex( TreeView: TfcCustomTreeView; Node: TfcTreeNode);var i : integer ; scode : string; // 正被选择的节点 TEXT (即 FB_UnitClass 表的主键) stemp : string;begin if cds_unitclass.RecordCount <> 0 then begin if treeview.Selected = nil then exit; if node = nil then exit; if node.Selected = true then begin //statusbar1.SimpleText := '所选类名为:'+node.Text; statusbar1.Panels[0].Text := '所选类名为:'+node.Text; node_text := node.text ; if node_text <> '单位分类' then begin ///////////////////////////////// dbgrid1.DataSource := ds_unit; //不是总跟节点时,显示数据 dbgrid1.enabled := true; ///////////////////////////////// for i := 1 to 60 do begin stemp := copy(node.text,i,1); if stemp = ' ' then begin stemp := copy(stemp,1,(length(stemp)-1)); break; end; scode := TRIM(trim(scode)+trim(stemp)); node_code := scode; end ; // 计数循环结束 end else begin ///////////////////////////// node_grade := 0; dbgrid1.Enabled := false ; dbgrid1.DataSource := nil; 总根结点时,显示为空 //////////////////////////////// end; end else exit; // 没有节点被选择退出节点图片选择过程 cds_unitclass.Locate('CUnitClassCode',vararrayof([SCODE]),[loPartialKey]); node_grade := cds_unitclass.FieldValues['igrade']; node_bend := cds_unitclass.FieldValues['bend']; if node.Expanded then begin if node.Level = 0 then begin node.imageindex := 0 ; node.selectedindex := 0; end else begin node.ImageIndex := 2; node.SelectedIndex := 2; end end else begin if node.level = 0 then begin node.imageindex := 0 ; node.selectedindex := 0; end else begin node.imageindex := 1; node.SelectedIndex :=1; end; end; end else begin node_text := '单位分类'; fctreeview1.Selected := fctreeview1.Items[0];
-------------------------------------------------
CUnitClassCode Varchar 10 CUnitClassName Varchar 20 IUCGrade Int 1 Bend Bit
-------------------------------------------------/////////////////////////////////////
//节点第一次刷新过程
////////////////////////////////////procedure Tfrm_ClientMain.node_first_fresh;
var
treenode : tfctreenode;
fstr : string;
bint : integer;
ibegin : integer;
i : integer;
level_tmp : integer;begin
if frm_clientmain.fctreeview1.Enabled = false then
frm_clientmain.fctreeview1.enabled := true;
fctreeview1.items.clear; treenode := fcTreeView1.items.add(nil,'单位分类');
statusbar1.Panels[0].Text := '所选类名为:'+'单位分类'; node_text := '单位分类'; treenode.ImageIndex := 0 ; if treenode = fcTreeView1.Items[0] then
treenode.ImageIndex := 0 ; if cds_unitclass.IsEmpty = false then
begin
cds_unitclass.First;
fstr := trim(cds_unitclass.FieldByName('cunitclasscode').asstring)+' '+
trim(cds_unitclass.fieldbyname('cunitclassname').asstring); if treenode = fcTreeView1.Items[0] then
treenode.ImageIndex := 0 ; while not cds_unitclass.Eof do
begin
bint := cds_unitclass.FieldByName('igrade').value;
if ((bint = 1) = true) then
begin
treenode := fcTreeView1.Items[0];
treenode.ImageIndex := 0;
treenode := fcTreeView1.items.addchild(treenode,fstr);
treenode.ImageIndex := 1;
end;//一级类判断结束 if ((bint <> 1) = true) then
begin treenode := fctreeview1.Items.addchild(treenode,fstr);
treenode.imageindex := 1;
end; level_tmp := treenode.Level;
cds_unitclass.Next;
ibegin := cds_unitclass.FieldValues['igrade'];
if ibegin = level_tmp then
begin treenode := treenode.Parent;
treenode.ImageIndex := 1;
end
else
begin
for i := 0 to (level_tmp -ibegin) do
begin treenode := treenode.parent;
treenode.ImageIndex := 1;
end;
end;
fstr := trim(cds_unitclass.FieldByName('cunitclasscode').asstring)+' '
+ trim(cds_unitclass.fieldbyname('cunitclassname').asstring); end;//结束数据list循环 end
else
begin
node_text := '单位分类';
exit; //如果 UnitClass 无纪录,退出节点刷新过程 end; //如果 UnitClass 无纪录,退出节点刷新过程end;
////////////////////////////////////////////////////
//点击节点,定位 FB_UnitClass 表中的纪录
////////////////////////////////////////////////////procedure Tfrm_ClientMain.fcTreeView1GetImageIndex(
TreeView: TfcCustomTreeView; Node: TfcTreeNode);var
i : integer ;
scode : string; // 正被选择的节点 TEXT (即 FB_UnitClass 表的主键)
stemp : string;begin
if cds_unitclass.RecordCount <> 0 then
begin if treeview.Selected = nil then
exit;
if node = nil then
exit;
if node.Selected = true then begin
//statusbar1.SimpleText := '所选类名为:'+node.Text;
statusbar1.Panels[0].Text := '所选类名为:'+node.Text; node_text := node.text ;
if node_text <> '单位分类' then
begin
/////////////////////////////////
dbgrid1.DataSource := ds_unit; //不是总跟节点时,显示数据
dbgrid1.enabled := true;
/////////////////////////////////
for i := 1 to 60 do
begin
stemp := copy(node.text,i,1);
if stemp = ' ' then
begin
stemp := copy(stemp,1,(length(stemp)-1));
break;
end;
scode := TRIM(trim(scode)+trim(stemp));
node_code := scode;
end ; // 计数循环结束
end
else
begin
/////////////////////////////
node_grade := 0;
dbgrid1.Enabled := false ;
dbgrid1.DataSource := nil; 总根结点时,显示为空
////////////////////////////////
end;
end
else
exit; // 没有节点被选择退出节点图片选择过程
cds_unitclass.Locate('CUnitClassCode',vararrayof([SCODE]),[loPartialKey]); node_grade := cds_unitclass.FieldValues['igrade']; node_bend := cds_unitclass.FieldValues['bend']; if node.Expanded then
begin
if node.Level = 0 then
begin
node.imageindex := 0 ;
node.selectedindex := 0;
end
else
begin
node.ImageIndex := 2;
node.SelectedIndex := 2;
end
end
else
begin
if node.level = 0 then
begin
node.imageindex := 0 ;
node.selectedindex := 0;
end
else
begin
node.imageindex := 1;
node.SelectedIndex :=1;
end;
end;
end
else
begin
node_text := '单位分类'; fctreeview1.Selected := fctreeview1.Items[0];
statusbar1.Panels[0].Text := '所选类名为:'+node.Text; dbgrid1.Enabled := false;
exit;
end;end;