⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xgyslb.pas

📁 不完备信息的数据发现
💻 PAS
字号:
unit xgyslb;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls, Db, DBTables, Grids, DBGrids, StdCtrls, Buttons, Mask, DBCtrls,
  ExtCtrls, DBClient, MConnect;

type
  Txgyslbf = class(TForm)
    CDS_gyslb: TClientDataSet;
    DS_gyslb: TDataSource;
    Panel_top: TPanel;
    SB_select: TSpeedButton;
    SB_exit: TSpeedButton;
    DBGrid_gyslb: TDBGrid;
    Splitter1: TSplitter;
    TreeView_gyslb: TTreeView;
    procedure FormShow(Sender: TObject);
    procedure SB_exitClick(Sender: TObject);
    procedure SB_selectClick(Sender: TObject);
    procedure DBGrid_gyslbDblClick(Sender: TObject);
    procedure TreeView_gyslbChange(Sender: TObject; Node: TTreeNode);
  private
    { Private declarations }
  public
    { Public declarations }
   function GetNodeLevel(sFormat,sCode:string):integer;
   procedure Dingwei;//更新树

  end;

var
  xgyslbf: Txgyslbf;
  cTreeCodeFormat:string='22222';
  mynode:array[0..6] of TTreenode;
  xcurid:string;
  curnode:TTreeNode;
  curlevel:integer;

implementation
uses dm;
{$R *.DFM}

function Txgyslbf.GetNodeLevel(sFormat,sCode:string):integer;
var i,level,iLen:integer;
begin
  level:=-1;
  iLen:=0;
  if (sFormat<>'') and (sCode<>'') then
    for i:=1 to Length(sFormat) do //分析编码格式,找出当前代码层次
    begin
      iLen:=iLen+StrToInt(sFormat[i]);
      if Length(sCode)=iLen then
      begin
        level:=i;
        break;
      end;
    end;
  result:=level;
end;

procedure Txgyslbf.FormShow(Sender: TObject);
var lbbh,nodeTxt:string;
    level:integer;
begin
  SelAffirm:=0;
  CDS_gyslb.Close;
  CDS_gyslb.CommandText:='select lbbh,lbmc FROM '+DatabaseName+'CG_gyslb order by lbbh';
  CDS_gyslb.Open;

  //初始化变量
  TreeView_gyslb.Enabled:=True;
  TreeView_gyslb.Items.Clear;
  level:=0 ;
  TreeView_gyslb.items.clear;
 //设置根节点
  mynode[level]:=TreeView_gyslb.items.add(TreeView_gyslb.TopItem,'供应商类别');
  mynode[level].ImageIndex:=1;
  //遍历数据表,利用编码字段记录排序规律,依次添加树节点
  CDS_gyslb.first;
   while not CDS_gyslb.Eof do
    begin
     lbbh:=trim(CDS_gyslb.FieldByName('lbbh').AsString);
     nodeTxt:=lbbh+'-'+trim(CDS_gyslb.FieldByName('lbmc').AsString);
     level:=GetNodeLevel(cTreeCodeFormat,lbbh);

     //这里返回代码的层次数
     if level>0 then
      begin
       //增加下一节点时,用添加子节点的方法可轻松实现节点间的层次关系。
      //注意:这里的父节点是用当前节点的上一级节点mynode[level-1]
       mynode[level]:=TreeView_gyslb.items.addchild(mynode[level-1],nodeTxt);
       mynode[level].ImageIndex:=2;
      end;
     CDS_gyslb.next;//下一条记录
    end;
    mynode[0].expand(False);
    dingwei;
  //设置颜色
  Panel_top.Color:=color_top;
  DBGrid_gyslb.FixedColor :=color_dbgrid;
end;

procedure Txgyslbf.dingwei;
var n:integer;
begin
  TreeView_gyslb.SetFocus;
  curnode:=TreeView_gyslb.Selected;
  curlevel:=TreeView_gyslb.Selected.Level;
  n:=pos('-',curnode.Text )-1;
  xcurid:=copy(curnode.text,1,n);
  if length(xcurid)<1 then
   begin
    CDS_gyslb.Filtered:=False;
    CDS_gyslb.Filter:='lbbh=''%''';
    CDS_gyslb.Filtered:=True;
    CDS_gyslb.Filtered:=False;
   end
  else
   begin
    CDS_gyslb.Filtered:=False;
    CDS_gyslb.Filter:='lbbh='+''''+xcurid+'*''';
    CDS_gyslb.Filtered:=True;
   end;
end;

procedure Txgyslbf.SB_exitClick(Sender: TObject);
begin
  SelAffirm:=0;
  close;
end;

procedure Txgyslbf.SB_selectClick(Sender: TObject);
begin
  SelAffirm:=1;
  close;
end;

procedure Txgyslbf.DBGrid_gyslbDblClick(Sender: TObject);
begin
  SelAffirm:=1;
  close;
end;

procedure Txgyslbf.TreeView_gyslbChange(Sender: TObject; Node: TTreeNode);
begin
  dingwei;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -