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

📄 client_dbgrid.pas

📁 Delphi 应用举例
💻 PAS
字号:
unit client_dbgrid;

interface

uses
  SysUtils, Classes, Controls, IWControl,IWHTMLTag,client_ds,DB,ExtCtrls, IWForm;

type
  THTML_STR=string;
  THandledEvent=procedure (var handled:boolean) of object;

  TIWClientDBGrid = class(TIWControl)
  private
    fClientDS:TIWClientDataSet;
    fcols:Tstringlist;
    frowcount:integer;
    function render_col_head:THTML_STR ;
    function render_one_row:THTML_STR ;
    procedure set_cds(value:TIWClientDataSet);

    procedure setcols(cls:Tstringlist);
    procedure get_cols(col_list:TstringList);
  public
    function ok_flag:string;
    function RenderHTML: TIWHTMLTag; override;
    constructor Create(AOwner: TComponent); override;
    destructor destroy; override;
    property NeedsFormTag:boolean  read fneedsFormtag;
  published
    property cols:Tstringlist read fcols write setcols;
    property ClientDS:TIWClientDataSet read  fClientDS  write set_cds ;
    property rowcount:integer read frowcount write frowcount;
    { Published declarations }
  end;
  
  TIWClientDBMemo = class(TIWControl)
  private
    fClientDS:TIWClientDataSet;
    fFieldName:string;
    procedure set_cds(value:TIWClientDataSet);
    procedure set_field_name(s:string);
  public
    function RenderHTML: TIWHTMLTag; override;
    constructor Create(AOwner: TComponent); override;
  published
    property ClientDS:TIWClientDataSet read  fClientDS  write set_cds ;
    property fieldname:string read fFieldName write set_field_name;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('test', [TIWClientDBGrid,TIWClientDBMemo]);
end;

//-------------
constructor TIWClientDBGrid.Create(AOwner: TComponent);
begin
   //self.re
   inherited create(AOwner) ;
   //
   fNeedsFormTag:=false;
   FSupportsSubmit := True;
   FRenderSize := true;
   //
   fcols:=Tstringlist.Create;
   fClientDS:=nil;
   frowcount:=10;
end;
destructor TIWClientDBGrid.destroy;
begin
   try
     fcols.Free;
   finally
     inherited destroy;
   end;
end;
procedure TIWClientDBGrid.setcols(cls:Tstringlist);
begin
    cols.Clear;
    cols.Text:=cls.Text;
end;


procedure TIWClientDBGrid.set_cds(value:TIWClientDataSet);
begin
   try
       if assigned(fClientDS) then if value=fClientDS then exit;
       fClientDS:=value;
   except
   end;
end;

function TIWClientDBGrid.render_col_head:THTML_STR ;
var i:integer;
    s,s1:string;
    col_list:TstringList;
begin
   result:='';
   col_list:=TstringList.Create;
   get_cols(col_list);
   if col_list.Count=0 then exit;
   s:='';
   for i:=0 to col_list.Count-1 do
   begin
       s1:='<th>'+col_list.Values[col_list.Names[i]]+'</th>';
       s:=s+s1;
   end;
   s:=s+'<th>状态</th>';
   result:='<tr>'+s+'</tr>';
   col_list.free;
end;
function TIWClientDBGrid.render_one_row:THTML_STR ;
var i,d:integer;
    s,s1,up_nm:string;
    fields:Tfields;
    ready_var,disp_var:string;
    col_list:TstringList;
begin
   result:='';

   fields:=fclientds.dataset.Fields;
   if fields=nil then exit;

   col_list:=TstringList.Create;
   get_cols(col_list);
   if col_list.Count=0 then exit;
   up_nm:=uppercase(name);
   ready_var:=ok_flag;
   disp_var:=up_nm+'_DISP';
   s:='';
   for i:=0 to col_list.Count-1 do
   begin
       d:=fields.FieldByName(col_list.Names[i]).DisplayWidth;
       if d>30 then d:=30;
       s1:='<td><div><input type=TEXT name="'+up_nm+'_'+col_list.Names[i]+'" size="'+IntToStr(d)+'" onFocus=''if('+ready_var+')'+disp_var+'.xfocus(this);'' onkeydown=''if('+ready_var+')'+disp_var+'.keys(this);''></div></td> ';
       s:=s+s1;
   end;
   s:=s+'<td><div><input type=TEXT name="'+up_nm+'_STATUSCOLUMN" size="1"></div></td>';
   result:='<tr>'+s+'</tr>';
   col_list.Free;
end;
procedure TIWClientDBGrid.get_cols(col_list:TstringList);
var i:integer;
    fields:Tfields;
begin
    if fcols.Text<>'' then
       col_list.text :=fcols.text
    else begin
       if not fclientds.Active then fclientds.open;
       fields:=self.fClientDS.dataset.Fields;
       for i:=0 to fields.Count -1 do
           col_list.Add(fields[i].FieldName+'='+fields[i].DisplayLabel);
    end;
end;
function TIWClientDBGrid.ok_flag:string;
begin
  result:=UpperCase(name)+'_OK';
end;
function TIWClientDBGrid.RenderHTML: TIWHTMLTag;
var s:string;
    i:integer;
    tmp: TIWHTMLTag;
    //------------------
    function declare_grd:string;
    var up_nm:string;
        fld_c:integer;
        col_list:TstringList;
    begin
        col_list:=TstringList.Create;
        get_cols(col_list);
        up_nm:=uppercase(name);

        result:='var '+up_nm+'_NAMEs= new Array(';

        for fld_c:=0 to col_list.count -2 do
            result:=result+'"'+col_list.names[fld_c]+'",';
        if col_list.count<2 then fld_c:=0;
        result:=result+'"'+col_list.names[fld_c]+'");';
        //
        result:=result+' var '+up_nm+'_IDs= new Array(';
        for fld_c:=0 to col_list.count -2 do
            result:=result+up_nm+'_'+col_list.names[fld_c]+',';
        result:=result+up_nm+'_'+col_list.names[fld_c]+');';

        result:=result+'var '+up_nm+'_DISP = new xmlDisplay('+self.fClientDS.get_crs_nm+','+up_nm+'_IDs,'+up_nm+'_NAMEs,'+up_nm+'_STATUSCOLUMN);';
        result:=result+'var '+ok_flag+'=true;';
        col_list.Free;
    end; 

begin
   Result := TIWHTMLTag.CreateTag('table');
   result.AddStringParam('border','1');
   result.AddStringParam('cellspacing','1');
   result.AddStringParam('bgcolor','#C0C0C0');
   self.fClientDS.open;
   //1检查是否定义了列信息,如果没有,表示全部:
   //2加入列标题 :
   Result.Contents.AddText(render_col_head);//标题
   //加入行信息:
   s:='';
   if frowcount=0 then frowcount:=fClientDS.dataset.RecordCount;
   for i:=0 to frowcount -1 do//self.fcols.Count-1 do
       s:=s+render_one_row;
   Result.Contents.AddText(s);

   tmp:=result;
   result:=TIWHTMLTag.CreateTag('span');
   result.AddStringParam('name',name+'_span');
   result.Contents.AddTagAsObject(tmp);

   s:='<script language="Javascript1.2" type="text/javascript"> ';
   s:=s+ declare_grd+'</script>';
   result.Contents.Addtext(s);
end;
//-------------------------------------------------------
//-------------------TIWClientDBEdit-------------------
//-------------------------------------------------------
procedure TIWClientDBMemo.set_cds(value:TIWClientDataSet);
begin
   try
       if assigned(fClientDS) then if value=fClientDS then exit;
       fClientDS:=value;
   except
   end;
end;
procedure TIWClientDBMemo.set_field_name(s:string);
begin
   fFieldName:=s;  
end;
function TIWClientDBMemo.RenderHTML: TIWHTMLTag;
var s,ss,nm:string;
    ok_flag,disp_nm:string;
begin
   ok_flag:=htmlname+'_OK';
   disp_nm:=htmlname+'_disp';
   result:=TIWHTMLTag.CreateTag('span');
   result.AddStringParam('name',name+'_span');
   result.AddStringParam('id',name+'_span');
   s:='<textarea  name="'+htmlname+'" id='+htmlname+' style="position:absolute;width:'+IntToStr(width)+';height:'+IntToStr(height)+'";  onFocus="if('+ok_flag+')'+disp_nm+'.xfocus(this);"  onkeydown= "if('+ok_flag+')'+disp_nm+'.keys(this);" onBlur="if('+ok_flag+')'+disp_nm+'.post();"></textarea>';
   //s:='<input type=text  name="'+htmlname+'" id='+htmlname+' onFocus="if('+ok_flag+')'+disp_nm+'.xfocus(this);"  onkeydown= "if('+ok_flag+')'+disp_nm+'.keys(this);">';
   //s:='<input type=text  name="'+htmlname+'" id='+htmlname+' onFocus="if('+ok_flag+')'+disp_nm+'.xfocus(this);"  onkeydown= "if('+ok_flag+')alert(''aaa'');">';
   //s:='<input type=text name="'+htmlname+'" id='+htmlname+' onFocus="alert(''aa'');"'+fClientDS.name+'_add();}"  onkeydown= "if('+fClientDS.get_ok_flag+')'+fClientDS.get_grpfield_nm+'.keys(this);">';
   result.Contents.Addtext(s);
   
   //----------------

    result.Contents.AddText('<script language="Javascript1.2" type="text/javascript">');
    ss:='var '+htmlname+'_Names = new Array("'+fFieldName+'");';
    s:=htmlName+'_IDs = new Array('+htmlName+');';

    result.Contents.AddText(ss);
    result.Contents.AddText(s);

    nm:='SubmitForm.'+fClientDS.HTMLName+'_grp_modi_flg';
    s:='var '+disp_nm+' =new xmlDisplay('+fClientDS.get_crs_nm+','+htmlName+'_IDs,'+htmlname+'_Names,'+nm+');';

    result.Contents.AddText(s);
    result.Contents.AddText('var '+ok_flag+'=true;');
    result.Contents.AddText('</script>');
    //
   //----------------
  
end;
constructor TIWClientDBMemo.Create(AOwner: TComponent);
begin
   inherited  Create(AOwner);
   self.FNeedsFormTag:=false;
end;
end.

⌨️ 快捷键说明

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