Intraweb + IWDbGrid,搭配MSSQL,能实现从表格到报告的所见即所得。即作业员在表格里查询或编辑的数据,可以即时输出成html文件,既可以当报告打印出来,也可以作为邮件的附件,发到有需求的邮箱里去。
把数据控件里的数据输出成html文件的代码如下,不同版本可能有些许不同。
procedure TIWUserSession.Enq2Html(sTitle:String);
var
i:Integer;
sField,sLine:String;
sDesc,sWidth:String;
slData:TStringList;
sFileName,sRealFile,sUrlFile:String;
begin
if not qBatch.Active then exit;
//创建数据清单
slData:=TStringList.Create;
slData.Add('<!DOCTYPE html><html><head>');
slData.Add('<title>项目管理系统-查询结果</title>');
slData.Add('<meta http-queiv="content-type" content="text/html;charset=utf-8"></head>');
slData.Add('<body><div align="center">'+sTitle+'</div><br>');
slData.Add('<table border="1" width="100%"><tbody><tr>');
//加栏位头
sLine:='';
if not qFields.Active then qFields.Open;
for i:=0 to qBatch.Fields.Count-1 do
begin
sField:=qBatch.Fields.Fields[i].FieldName;
if qFields.Locate('FieldName',sField,[])then
begin
sDesc:=qFields.FieldByName('FieldDesc').AsString;
sWidth:=qFields.FieldByName('ViewWidth').AsString;
end;
sLine:=sLine+'<th width='''+sWidth+'''>'+sDesc+'</th>';
end;
slData.Add('</tr>'); //表头结束
slData.Add(sLine);
//加表中内容
qBatch.First;
while not qBatch.Eof do
begin
sLine:='<tr>';
for i:=0 to qBatch.Fields.Count-1 do
begin
sLine:=sLine+'<td>'+qBatch.Fields.Fields[i].AsString+'</td>';
end;
sLine:=sLine+'</tr>';
slData.Add(sLine);
qBatch.Next;
end;
sFileName:=sys_UsID + FormatDateTime('HHMMSS',now())+'.html';
sRealFile:=IWServerController.ContentPath+'temp\'+sFileName;
if FileExists(sRealFile) then DeleteFile(sRealFile);
slData.SaveToFile(sRealFile,TEncoding.UTF8);
slData.Free;
sUrlFile:='/temp/'+sFileName;
webApplication.NewWindow(sUrlFile);
end;
用IWHtmlLabel控件显示一个表格,以下例是表格形式显示产品关键信息
procedure TfmmpdPhoto.awGridAsyncLinkClick(Sender: TObject;
EventParams: TStringList; RowIndex, ColumnIndex: Integer);
var
sValue,sLine:String;
i1,i2:Integer;
slData:TStringList;
begin
inherited;
sValue:=awGrid.Cells[ColumnIndex,RowIndex];
sValue:=StringReplace(sValue,' ','',[rfReplaceAll]);
i1:=14;
i2:=pos('title=',sValue);
sValue:=copy(sValue,i1,i2-i1-1);
qMaster.Locate('RecId',sValue,[]);
UserSession.sys_Value1:=sValue; //记录ID
slData:=TStringList.Create;
slData.Add('<table border="0" width="100%"><tr>');
sLine:='<th width="50%"></th><th width="50%"></th>';
slData.Add(sLine);
sLine:='<tr><td>'+'编号:'+qMaster.FieldByName('pdNum').AsString+'</td>';
sLine:=sLine+'<td>'+'型号:'+qMaster.FieldByName('pdType').AsString+'</td>';
sLine:=sLine+'</tr>';
slData.Add(sLine);
sLine:='<tr><td>'+'功率:'+qMaster.FieldByName('pdPower').AsString+'W</td>';
sLine:=sLine+'<td>'+'电压:'+qMaster.FieldByName('pdVoltage').AsString+'V</td>';
sLine:=sLine+'</tr>';
slData.Add(sLine);
sLine:='<tr><td>'+'风力:'+qMaster.FieldByName('pdWind').AsString+'</td>';
sLine:=sLine+'<td>'+'噪音:'+qMaster.FieldByName('pdNoise').AsString+'dB</td>';
sLine:=sLine+'</tr>';
slData.Add(sLine);
sLine:='<tr><td>'+'特性:'+qMaster.FieldByName('pdDesc').AsString+'</td>';
sLine:=sLine+'<td>'+'存放:'+qMaster.FieldByName('pdLocation').AsString+'</td>';
sLine:=sLine+'</tr>';
slData.Add(sLine);
sLine:='<tr><td>'+'备注:'+qMaster.FieldByName('Remark').AsString+'</td>';
sLine:=sLine+'</tr>';
slData.Add(sLine);
UserSession.sys_Value2:=slData.Text;
TfmmpdProd.Create(webApplication).Show;
end;
