📄 client_dbgrid.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 + -