关于将dbgrid的内容转换成网页的问题,UP有分
现在工作中有个要求,将dbgrid中的查询结果,转换成html文件,
然后利用ie来预览和打印,请教如何解决?
(听说delphi7中有自带控件可解决,不知是否是真的?)
我下载了一个dbehlib for d7控件,但在delphi7 中装不上,总提示某某.dcu文件
找不到,不知是什么原因?除了这个控件还有别的好方法吗?
推荐阅读
那不是用delphi了
应该用asp!
实在不行 自己遍历grid 自己来生成吧
帮你顶吧
从delphi5开始就有这种功能了.
用internet页的tquerytableproducer. 实际上它并不是把dbgrid中的内容转换成了html, 而是直接把数据查询的结果输出为html. 当然, 使用公共的tquery, 就可以解决你的问题了.
tdatasettableproducer的功能也差不多.
delphi在数据库方面是很强大的, 不仅可以输出成html, 还可以从网页中输入信息到数据库, 并支持xml/dataset自动转换等...
在tools->environment options->library->library path中加入ehlib的路径,就可以编译了
我用的dbgrideh控件就有这种功能,他在帮助里就介绍了使用方法,用该控件自带的export函数可以直接将data保存为html/rtf/xls等格式文件。
devexpress qgrid控件是setup的,省去你的烦恼。而且功能强大。
activeform
dbgrideh可以把数据导出成网页的,delphi7下也能装ehlib,你再找找其他的版本下载
最好用xml
up
遍历dbgrid,然后自已生成
dbgrid 变换成 html 表格
(*//
标题 : 数据网格处理成超文本表格
说明 : 支持对齐、字体、背景颜色 ; 做打印又有一种新方法了!
设计 :zswang
日期 :2002-05-19
支持 :wjhu111@21cn.com
//*)
///////begin source
function colortohtml(mcolor: tcolor): string;
begin
mcolor := colortorgb(mcolor);
result := format(#%.2x%.2x%.2x,
[getrvalue(mcolor), getgvalue(mcolor), getbvalue(mcolor)]);
end; { colortohtml }
function strtohtml(mstr: string; mfont: tfont = nil): string;
var
vleft, vright: string;
begin
result := mstr;
result := stringreplace(result, &, &, [rfreplaceall]);
result := stringreplace(result, <, <, [rfreplaceall]);
result := stringreplace(result, >, >, [rfreplaceall]);
if result = then result:=-;
if not assigned(mfont) then exit;
vleft := format(<font face="%s" color="%s">,
[mfont.name, colortohtml(mfont.color)]);
vright := </font>;
if fsbold in mfont.style then begin
vleft := vleft + <b>;
vright := </b> + vright;
end;
if fsitalic in mfont.style then begin
vleft := vleft + <i>;
vright := </i> + vright;
end;
if fsunderline in mfont.style then begin
vleft := vleft + <u>;
vright := </u> + vright;
end;
if fsstrikeout in mfont.style then begin
vleft := vleft + <s>;
vright := </s> + vright;
end;
result := vleft + result + vright;
end; { strtohtml }
function dbgridtohtmltable(mdbgrid: tdbgrid; mstrings: tstrings;
mcaption: tcaption = ): boolean;
const
caligntext: array[talignment] of string = (left, right, center);
var
vcolformat: string;
vcoltext: string;
vallwidth: integer;
vwidths: array of integer;
vbookmark: string;
i, j: integer;
begin
result := false;
if not assigned(mstrings) then exit;
if not assigned(mdbgrid) then exit;
if not assigned(mdbgrid.datasource) then exit;
if not assigned(mdbgrid.datasource.dataset) then exit;
if not mdbgrid.datasource.dataset.active then exit;
vbookmark := mdbgrid.datasource.dataset.bookmark;
mdbgrid.datasource.dataset.disablecontrols;
try
j := 0;
vallwidth := 0;
for i := 0 to mdbgrid.columns.count - 1 do
if mdbgrid.columns[i].visible then begin
inc(j);
setlength(vwidths, j);
vwidths[j - 1] := mdbgrid.columns[i].width;
inc(vallwidth, mdbgrid.columns[i].width);
end;
if j <= 0 then exit;
mstrings.clear;
mstrings.add(format(<table bgcolor="%s" border=1 width="100%%">,
[colortohtml(mdbgrid.color)]));
if mcaption <> then
mstrings.add(format(<caption>%s</caption>, [strtohtml(mcaption)]));
vcolformat := ;
vcoltext := ;
vcolformat := vcolformat + <tr>#13#10;
vcoltext := vcoltext + <tr>#13#10;
j := 0;
for i := 0 to mdbgrid.columns.count - 1 do
if mdbgrid.columns[i].visible then begin
vcolformat := vcolformat + format(
<td bgcolor="%s" align=%s width="%d%%">displaytext%d</td>#13#10,
[colortohtml(mdbgrid.columns[i].color),
caligntext[mdbgrid.columns[i].alignment],
round(vwidths[j] / vallwidth * 100), j]);
vcoltext := vcoltext + format(
<td bgcolor="%s" align=%s width="%d%%">%s</td>#13#10,
[colortohtml(mdbgrid.columns[i].title.color),
caligntext[mdbgrid.columns[i].alignment],
round(vwidths[j] / vallwidth * 100),
strtohtml(mdbgrid.columns[i].title.caption,
mdbgrid.columns[i].title.font)]);
inc(j);
end;
vcolformat := vcolformat + </tr>#13#10;
vcoltext := vcoltext + </tr>#13#10;
mstrings.text := mstrings.text + vcoltext;
mdbgrid.datasource.dataset.first;
while not mdbgrid.datasource.dataset.eof do begin
j := 0;
vcoltext := vcolformat;
for i := 0 to mdbgrid.columns.count - 1 do
if mdbgrid.columns[i].visible then begin
vcoltext := stringreplace(vcoltext, format(>displaytext%d<, [j]),
format(>%s<, [strtohtml(mdbgrid.columns[i].field.displaytext,
mdbgrid.columns[i].font)]),
[rfreplaceall]);
inc(j);
end;
mstrings.text := mstrings.text + vcoltext;
mdbgrid.datasource.dataset.next;
end;
mstrings.add(</table>);
finally
mdbgrid.datasource.dataset.bookmark := vbookmark;
mdbgrid.datasource.dataset.enablecontrols;
vwidths := nil;
end;
result := true;
end; { dbgridtohtmltable }
///////end source
{ uses shellapi; }
///////begin demo
procedure tform1.button1click(sender: tobject);
begin
dbgridtohtmltable(dbgrid1, memo1.lines, caption);
memo1.lines.savetofile(c:\temp.htm);
shellexecute(handle, nil, c:\temp.htm, nil, nil, sw_show);
end;
///////end demo
使用tdatasettableproducer。
用ehlib的dbgrideh!很好用!看他的demo就可以了
哪那么复杂,用dev express 的cxgrid自己就带导出为html,xml的功能,而且格式还很漂亮
zhangheaaa(竹)
你那两个问题,使用tdatasettableproducer就不会出现了,不需要处理html tag,也不需要手工设置字段标记,点击设置一下属性就行,运行时获得datasettableproducer1.content就ok了。
activeformx


讨论区