unit U_JwlKcWlHelp; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData, cxTextEdit, cxGridLevel,strUtils, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxClasses, cxControls, cxGridCustomView, cxGrid, StdCtrls, ComCtrls, ToolWin, ImgList, DBClient, ADODB; type PMyRec = ^TMyRec; TMyRec = record wbcode: string; Tvtem_str: string; end; type TfrmJwlKcWlHelp = class(TForm) ToolBar1: TToolBar; Tok: TToolButton; Tclose: TToolButton; GroupBox2: TGroupBox; Label1: TLabel; Label2: TLabel; edttj: TEdit; edtSpec: TEdit; CheckBox1: TCheckBox; dbGrid1: TcxGrid; tv1: TcxGridDBTableView; tv1mnumber1: TcxGridDBColumn; tv1mname1: TcxGridDBColumn; tv1model1: TcxGridDBColumn; tv1mareaname1: TcxGridDBColumn; tv1batchnum1: TcxGridDBColumn; tv1caizhi1: TcxGridDBColumn; tv1factoryName: TcxGridDBColumn; tv1endquan1: TcxGridDBColumn; tv1primaryunitname1: TcxGridDBColumn; dbGrid1Level1: TcxGridLevel; GroupBox1: TGroupBox; cxGrid2: TcxGrid; Tv2: TcxGridDBTableView; Tv2mnumber1: TcxGridDBColumn; Tv2mname1: TcxGridDBColumn; Tv2model1: TcxGridDBColumn; Tv2mareaname1: TcxGridDBColumn; Tv2batchnum1: TcxGridDBColumn; Tv2caizhi1: TcxGridDBColumn; Tv2factoryName: TcxGridDBColumn; Tv2primaryunitname1: TcxGridDBColumn; Tv2endquan1: TcxGridDBColumn; cxGrid2Level1: TcxGridLevel; ImageList24: TImageList; DataSource1: TDataSource; ADOQueryHelp: TADOQuery; CDS_sel: TClientDataSet; DataSourceSel: TDataSource; ADOConnection1: TADOConnection; Label3: TLabel; edt_zjm: TEdit; TreeView1: TTreeView; ADOQueryTmp: TADOQuery; ADOQueryChild: TADOQuery; procedure TokClick(Sender: TObject); procedure TcloseClick(Sender: TObject); procedure tv1DblClick(Sender: TObject); procedure Tv2DblClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); procedure edttjChange(Sender: TObject); private procedure DoQuery(); procedure DoFilter(); procedure AddSelRow(); procedure InitTree(); procedure AddChildNode(parentNode:TtreeNode;mNo:string); public FStoreCode:string; fIsRhl:Boolean; end; var frmJwlKcWlHelp: TfrmJwlKcWlHelp; implementation uses U_formPas,U_global; {$R *.dfm} ////////////////////////////////////////////////////// // ////////////////////////////////////////////////////// procedure TfrmJwlKcWlHelp.DoQuery(); begin try adoqueryHelp.DisableControls ; with adoqueryHelp do begin close; sql.Clear; sql.Add('select distinct A.factory,A.factoryName,B.mNumber,B.mName,'); sql.Add(''''' as BatchNum,C.zjm,'); sql.Add('B.Model,B.primaryUnit,B.primaryUnitName'); sql.Add('from kf_nowQuan A'); sql.Add('inner join gy_material B on A.mNumber=B.mNumber'); if fIsRhl then sql.Add('inner join sc_dyeInfo C on A.mNumber=C.dyeCode'); if trim(FStoreCode)<>'' then sql.Add('where A.whcode='+quotedStr(trim(FStoreCode))); if not CheckBox1.Checked then sql.Add('and A.endQuan>0'); //sql.Add('order by A.Mnumber'); open; end; CreateCDS(adoqueryHelp,cds_sel); finally adoqueryHelp.EnableControls ; end; end; //////////////////////////////////////////////////// //�������������� //////////////////////////////////////////////////// procedure TfrmJwlKcWlHelp.DoFilter(); var filterStr:string; begin filterStr:=''; // if trim(edttj.Text) <>'' then filterStr:=filterStr+' and mName like '+quotedStr('%'+trim(edttj.Text)+'%'); //��� if trim(edtSpec.Text)<>'' then filterStr:=filterStr+' and model like '+quotedStr('%'+trim(edtSpec.Text)+'%'); //xjm if trim(edt_zjm.Text)<>'' then filterStr:=filterStr+' and zjm like '+quotedStr('%'+trim(edt_zjm.Text)+'%'); try ADOQueryHelp.DisableControls ; if trim(filterStr)='' then begin ADOQueryHelp.Filtered:=false; ADOQueryHelp.EnableControls; exit; end; filterStr:=trim(RightBStr(filterStr,length(filterStr)-4)); with ADOQueryHelp do begin filtered:=false; filter:=filterStr; filtered:=true; end; finally ADOQueryHelp.EnableControls; end; end; ///////////////////////////////////////////////////// //�������ܣ�����ѡ��ļ�¼ //////////////////////////////////////////////////// procedure TfrmJwlKcWlHelp.AddSelRow(); var i:integer; begin if CDS_Sel.Locate('mNumber;factory',VarArrayOf([trim(ADOQueryHelp.fieldbyname('mNumber').AsString), // trim(ADOQueryHelp.fieldbyname('BatchNum').AsString), trim(ADOQueryHelp.fieldbyname('factory').AsString)]), []) then begin application.MessageBox(pchar('�Ѵ���ͬ�������εġ�'+trim(ADOQueryHelp.fieldbyname('mname').AsString)+'�����ϼ�¼!'),'��ʾ��Ϣ',0); exit; end; with CDS_Sel do begin CDS_Sel.append; for i:=0 to ADOQueryHelp.FieldCount-1 do begin fields[i].Value:=ADOQueryHelp.Fields[i].Value; end; CDS_Sel.Post; end; end; procedure TfrmJwlKcWlHelp.TokClick(Sender: TObject); begin if adoqueryHelp.IsEmpty then ModalResult:=-1 else modalResult:=1; end; procedure TfrmJwlKcWlHelp.TcloseClick(Sender: TObject); begin close; end; procedure TfrmJwlKcWlHelp.tv1DblClick(Sender: TObject); begin AddSelRow(); end; procedure TfrmJwlKcWlHelp.Tv2DblClick(Sender: TObject); begin if CDS_Sel.IsEmpty then exit; CDS_sel.Delete; end; procedure TfrmJwlKcWlHelp.FormCreate(Sender: TObject); begin groupBox1.Align :=alClient; CDS_Sel.Close; with ADOConnection1 do begin Connected:=false; ConnectionString:=gConString; Connected:=true; end; end; procedure TfrmJwlKcWlHelp.FormShow(Sender: TObject); begin DoQuery(); edttj.SetFocus ; end; procedure TfrmJwlKcWlHelp.edttjChange(Sender: TObject); begin Dofilter(); end; procedure TfrmJwlKcWlHelp.InitTree(); var MyRecPtr: PMyRec; tmpstr :string; NodeXX,CNode :TTreeNode; array_Node:array of TTreeNOde; i:integer; begin try New(MyRecPtr); MyRecPtr^.wbcode := 'ALL'; MyRecPtr^.Tvtem_str := 'ȫ��'; with TreeView1 do begin Items.Clear; CNode := Items.AddObject(nil, MyRecPtr^.Tvtem_str, MyRecPtr); CNode.ImageIndex := 1; CNode.SelectedIndex := 2; end; with TreeView1 do begin Items.Clear; CNode := Items.AddObject(nil, MyRecPtr^.Tvtem_str, MyRecPtr); CNode.ImageIndex := 1; CNode.SelectedIndex := 2; end; with TreeView1,ADOQueryTmp do begin close; sql.clear; sql.Add('select code,name from xc_code'); sql.Add('where flag = ''DYETYPE'' AND valid = ''Y'''); sql.Add('order by code'); Open; if recordcount = 0 then begin application.MessageBox('�Բ���,��������δ����Ⱦ���ϻ�������:DYETYPE!','��ʾ��Ϣ',0); exit; end; setLength(array_Node, RecordCount); i:=0; while not Eof do begin New(MyRecPtr); MyRecPtr^.wbcode := trim(fieldbyname('code').Asstring); MyRecPtr^.Tvtem_str := trim(fieldbyname('name').Asstring); NodeXX := Items.AddChildObject(TreeView1.Items[0], MyRecPtr^.Tvtem_str, MyRecPtr); NodeXX.ImageIndex := 1; NodeXX.SelectedIndex := 2; array_Node[i]:=NodeXX; INC(i); next; end; Close; end; /////////////////////////////////////// with ADOQueryChild do begin close; filtered:=false; sql.Clear ; sql.Add('select * from xc_code'); // sql.Add('where CLASSFLAG=''DYECLASS'' and valid=''Y'''); Open; end; for i:=0 to Length(array_Node)-1 do begin //�������䷽ AddChildNode(array_Node[i],PMyRec(array_Node[i].Data)^.wbcode); end; TreeView1.Items[0].Selected := True; TreeView1.Items[0].Expand(true); //InitGrid(); except ; end; end; ////////////////////////////////////////////////////////////////// //�������ܣ������ӽڵ� ////////////////////////////////////////////////////////////////// procedure TfrmJwlKcWlHelp.AddChildNode(parentNode:TtreeNode;mNo:string); var NodeInfo: PMyRec; mNode:TtreeNode; i:integer; array_Node:array of TTreeNOde; begin with ADOQueryChild do begin filtered:=false; filter:='flag ='''+PMyRec(parentNode.Data)^.wbcode+''''; filtered:=true; Open; if RecordCount<=0 then exit; ////////////////////// setLength(array_Node, RecordCount); i:=0; while not Eof do begin with treeView1 do begin New(NodeInfo); //��� NodeInfo^.wbcode:=trim(fieldByName('code').AsString); //���� NodeInfo^.Tvtem_str :=fieldByName('Name').AsString +'('+trim(fieldByName('code').AsString)+')'; mNode:=Items.AddChildObject(parentNode, NodeInfo^.Tvtem_str, NodeInfo); array_Node[i]:=mNode; INC(i); end; Next; end; for i:=0 to Length(array_Node)-1 do begin //������ AddChildNode(array_Node[i],PMyRec(array_Node[i].Data)^.wbcode); end; end; end; end.