两个问题,大家帮我支支招
问题一:我设计出窗体,但窗体中的内容需要进行打印,如何打印窗体(注:窗体打印可能会根据窗体内容不同而显示不同的打印,比如说某一个ComboBox选择不同的内容,与之相关的某些TEXTBOX会设其Enable属性为false,而打印时不需要显示出该内容)。我唯一想到的是使用报表设计器,大家帮我想想哪一个报表设计器能够将窗体数据传输到打印中。
问题二:我想在Web中实现读取本地数据,比如说某Client端有一个数据库,我需要在不下载任何组件的情况下,将数据库里面的内容根据自己配置的SQL语句读出,并且将其记录返回到SERVER端。如何实现?谢谢!
问题点数:100、回复次数:19Top
1 楼roibin(花菜)回复于 2005-04-03 01:27:32 得分 0
UP!Top
2 楼athossmth(athos)回复于 2005-04-03 03:16:23 得分 20
一、flygoldfish的技术(goldprinter.dll的代码我用reflector看了一下)也就那么回事,真的想掌握一个打印工具,可以看这两篇文章,非常有价值:
http://www.microsoft.com/china/community/Column/65.mspx
利用XML实现通用WEB报表打印
卢彦
http://www.microsoft.com/china/community/program/originalarticles/TechDoc/WSE_Print.mspx 讨论创建基于WSE的报表打印服务及其实现
作者:林焯
二、fso上传
或者xmlhttp上传
或者使用ActiveX控件,使得用户远程操作数据库文件。参考:《如何在Web页面上直接打开、编辑、创建Office文档 》http://blog.joycode.com/kaneboy/archive/2004/11/03/37889.aspx
限制:
A、Server端直接操作Browser上的文件,Browser端需要配置相应权限
B、Server端需要安装office xp sp3以上或者自行注册office的activex控件"owssupp.dll"
或者vpn
或者……Top
3 楼dutguoyi(新鲜鱼排)回复于 2005-04-03 09:12:14 得分 2
不懂,帮顶Top
4 楼CrazyDeng(DengWei)回复于 2005-04-03 09:28:21 得分 2
学习,帮顶!!Top
5 楼jjkk168(老加班的人--好好学习,天天吃饭)回复于 2005-04-03 22:02:15 得分 0
TO athossmth(athos)
第一个问题我现在还没有怎么仔细考虑使用B/S结构的程序,客户端使用的仍然是一些DLL,窗体也就是基本的WINDOWS窗体。想要设计打印如果要采用这种WEB方式的似乎有点偏了(我的感觉)。我是一名新手,这方面不太懂,还请多指教。
第二个问题
1采取上传的方式似乎不太好实现,假如是SQL Server或者是Oracle等数据库,非文件型的,那怎么上传啊?
2再就是要求客户端装了OFFICE2003,这个条件似乎有点苛刻,还有简便一点的方法没?
谢谢!Top
6 楼saintqiqi(钻石星辰(www.saintzone.net))回复于 2005-04-03 23:21:12 得分 2
学习,帮顶!!Top
7 楼gyf19(秋天的云)回复于 2005-04-04 00:24:31 得分 2
接分,UPTop
8 楼yuanarea(Sail before)回复于 2005-04-04 02:57:11 得分 12
问题复杂,关注~~~
又大概看了一下 第二个问题可以用XML可是传输数据;第一个问题可以动态创建控件;UPTop
9 楼jjkk168(老加班的人--好好学习,天天吃饭)回复于 2005-04-04 09:37:58 得分 0
俺知道问题复杂了一点。但真不知道该怎么处理了。
我自己的想法仅只是这样
第一个问题:如果有一个报表设计器,通过什么位置,比如说宏或者Verbs里面点击打开一个报表设计器的界面,能够导出所编辑窗口的所有控件(这些控件倒还好办,控件的使用都是俺规定死了的),设置好位置之后再进行保存(主要原因是我想保存在程序内部,不知道可不可行)。保存好后,在运行的时候通过什么方式将窗体中的数据读出来,再往报表里面写,然后就可以实现打印了。这里面确实被我想得够复杂,但也想不出什么简单的办法了。需要打印的窗体太多,总不至于一个个地去用PrintDocument来画吧,不太现实。
第二个问题:我觉得我的问题怎么着也有点说不过去,试想,如果能够读取出数据库里面的内容,那肯定是需要曝光说IE有漏洞了。但这样对于客户来讲,操作太简单了,客户机不需要安装什么软件,只要在WEB页面上点击或者输入,就可以将相关的信息上报,那样不占资源,并且效率肯定会好一点(肯定会好一点,至少客户机里面没有自己写的上传程序占着内存)。我不知道在Web里面使用ActiveX效果会怎么样?会不会被一些什么程序给挡了,或者存在什么其他的问题。
敬请各位帮我支支招吧,想得头破血流了。Top
10 楼pingnt(淡蓝色的雪)回复于 2005-04-04 09:48:23 得分 2
顶一下.Top
11 楼jjkk168(老加班的人--好好学习,天天吃饭)回复于 2005-04-04 15:52:34 得分 0
自己再UP一下,急啊Top
12 楼lyzo144(jkiii-抵制日货)回复于 2005-04-04 16:17:45 得分 50
System.Drawing.Printing.PrintDocument doc1 = new System.Drawing.Printing.PrintDocument();
doc1.PrinterSettings.Copies=Convert.ToInt16(dbBandS);
doc1.PrinterSettings.PrinterName=PrintM1;
doc1.PrintPage += new System.Drawing .Printing .PrintPageEventHandler( Doc_PrintPage);
print.Document = doc1;
////打印
doc1.Print();
private void Document_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
RectangleF srcRect = new RectangleF(0,0,110,90);
RectangleF destRect = new RectangleF(0,0,330,270);
GraphicsContainer containerState = e.Graphics.BeginContainer(destRect, srcRect,
GraphicsUnit.Millimeter);
Graphics g = e.Graphics; //获得绘图对象
foreach (Control c in panel10.Controls)
{
// Get the time of the next control so we can unbox it
string strType = c.GetType().ToString().Substring(c.GetType().ToString().LastIndexOf(".") + 1);
// MessageBox.Show(strType);
switch (strType)
{
case "RadioButton":
{
RadioButton t=(RadioButton)c;
if(t.Checked==true)
{
ControlPaint.DrawRadioButton(g,t.Left-20, t.Top+5, t.Width/2+5, t.Height/2+5, ButtonState.Checked);
g.DrawString(t.Text, t.Font, new SolidBrush(System.Drawing.Color.Black), t.Left+20,
t.Top + t.Height/2 - g.MeasureString("a",t.Font).Height/2, new StringFormat());
}
else
{
ControlPaint.DrawRadioButton(g,t.Left-20, t.Top+5, t.Width/2+5, t.Height/2+5, ButtonState.Pushed);
g.DrawString(t.Text, t.Font, new SolidBrush(System.Drawing.Color.Black), t.Left+20,
t.Top + t.Height/2 - g.MeasureString("a", t.Font).Height/2, new StringFormat());
}
}
break;
case "Label":
Label l=(Label)c;
//MessageBox.Show(l.Font.ToString ());
g.DrawString(l.Text, l.Font, new SolidBrush(System.Drawing.Color.Black), l.Left+25,
l.Top + l.Height/2 - g.MeasureString("a", l.Font).Height/2, new StringFormat());
break;
}
}
}Top
13 楼lyzo144(jkiii-抵制日货)回复于 2005-04-04 16:21:32 得分 2
第一个是调用打印的,没什么,第二个类是对窗体的,很好用,case就能把出现的控件画出来,暂时只传了textbox,Label,RadioButton,其他自己模仿琢磨吧!Top
14 楼conan19771130(残疾人程序员,学习第2门外语)回复于 2005-04-04 16:49:32 得分 2
水晶报表不行吗?Top
15 楼jjkk168(老加班的人--好好学习,天天吃饭)回复于 2005-04-04 22:40:21 得分 0
感谢 lyzo144(jkiii-抵制日货)
是解决了部分问题。但老问题同样存在,就是那些需要自己设定的打印页面,比如说在某些情况下某些字段不显示出来,某些列不显示出来等。
再还存在一个问题,就是当存在网格时,如果网格列太宽了,就会超出页面。我如何在别外一页补上没有打印完的列?
TO conan19771130(柯南)
我试过水晶报表,似乎没有我想要的效果。我都想晕了都不知道怎么将网格里面的内容(可能存在不同行)怎么加进水晶报表,但每次失败,不知道是我代码写的不对还是本身就有缺陷。
据我所知,水晶报表要不就干脆就是静态页面,要不就与数据库直连,这样很方便,但如果想动态在里面加上某个字段,或者动态加入一行,似乎达不到这个效果。
Top
16 楼tttick(秉承一贯懒散的生活方式与严谨的工作态度¢)CodinG)回复于 2005-04-05 00:39:16 得分 2
学习了。。。upTop
17 楼xlkg_ss(我想学习)回复于 2005-04-05 08:56:55 得分 2
hao,upupTop
18 楼jjkk168(老加班的人--好好学习,天天吃饭)回复于 2005-04-06 01:02:40 得分 0
再顶一下!!Top
19 楼jjkk168(老加班的人--好好学习,天天吃饭)回复于 2005-04-06 11:16:06 得分 0
对于第一个问题,我想来想去,想到一个解决的办法,就是利用表格进行设计(反正需要导出为EXCEL的,一举两得)
就是将界面相关信息保存到DATASET或者XML中,然后再对表格进行设计,打印或导出的时候再对数据进行重画,不知道这样是否可行?Top




