我想实现这样的报表vs2005-CrystalReport

huisheng 2008-01-18 02:47:17
环境:vs2005,报表:CrystalReport

报表的列表是根据查询的SQL语句来动态产生

通俗点就是,我查询显示一个datagrid 然后将DTATGRID的内容使用CrystalReport打印出来(也就是打印datagrid)。
你不能先做一个CrystalReport报表文件,因为查询的显示字段是不定的(动态组合查询条件),还有根据datagrid的列宽来实在报表中对应的列宽(超出页的宽度怎么处理)。

不知道有没有说清楚,我才用CrystalReport报表。帮忙吧高手们。谢谢
...全文
233 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
SUNSHINE2007 2008-02-14
  • 打赏
  • 举报
回复
把需要显示的列全部Select出来,构建XSD,然后显示或者隐藏列
阿泰 2008-01-22
  • 打赏
  • 举报
回复
此文章关联的代码为

http://www.webmis.com.cn/
http://www.anyreport.net/

是成熟的解决方案,且有完全的代码~~
huisheng 2008-01-22
  • 打赏
  • 举报
回复
babyt
你说的那个方式(http://www.cnblogs.com/rchen/articles/100649.html)
protected void DrawGridLine(Graphics g,Rectangle p_rec,Pen p_pen,int p_rows,int p_cols,int p_rowHeight,int[] p_arrColsWidth,GridLineFlag p_gridLineFlag,GridBorderFlag p_gridBorderFlag,PointF p_scaleXY)
{
//缩放矩阵,用于绘图
Rectangle rec = new Rectangle(p_rec.X,p_rec.Y,p_rec.Width,p_rec.Height);

//缩放程序
this.TransGrid(g,rec,p_scaleXY);

#region 有网格线才画
if (p_gridLineFlag != GridLineFlag.None)
{
int lngRows = p_rows; //arrStrGrid.GetLength(0); //行数,也可由二维数组算出
int lngCols = p_cols; //arrStrGrid.GetLength(1); //列数

int lngRowIndex; //当前行
int lngColIndex; //当前列

//起止坐标
int X1, X2,Y1, Y2;

int lngLineLen; //线长
int lngLineHei; //线高


//计算坐标、线长、线高
lngLineLen = rec.Width;
lngLineHei = rec.Height;

#region 包括横线就画

---------------------------------------------------
问题:
//缩放程序
this.TransGrid(g,rec,p_scaleXY);
其中的TransGrid是什么????
阿泰 2008-01-18
  • 打赏
  • 举报
回复
当然啦,前面说的是CR和Excel异同
其实,更合理的方式是直接打印Grid,呵呵

请参考
http://blog.csdn.net/flygoldfish/archive/2006/02/06/592790.aspx
阿泰 2008-01-18
  • 打赏
  • 举报
回复

这个对你可能有所帮助
http://www.cnblogs.com/rchen/articles/100649.html
当然,如果你要自定义列宽度的话,就需要额外的代码,当然,用excel实现就简单多了

另外就是Excel可以直接打印你操作的sheet,而且可以全隐式操作
也就是说,你只要加个按钮,如“打印”,那么就可以实现输出到打印机的效果~~
中间不会有提示你再启动excel之类的:)
当然,客户机器上必须安装了Excel才行
huisheng 2008-01-18
  • 打赏
  • 举报
回复
那也就是说使用导出到EXCEL中吗?
阿泰 2008-01-18
  • 打赏
  • 举报
回复
可以,但是有两个问题,
一是步骤上实现起来比较复杂。
如果你有高级开发版这个版本的话,可能会容易些。(可惜俺一直只能用企业版,没这个功能)
二是如何自适应列宽这个水晶报表比较难控制。也就是说显示出来效果不会很美观
如果你的列宽度不定的话
当然理论上将你可以指定列宽,但是指定A列后,后续的列都要依次重新指定
如果受纸型约束,如你指定的列显示大于之前的纸型,又或者你需要在程序中根据数据列重新指定纸型

个人认为,无论是从项目成本和个人开发成本(精力消耗)上来说,都不易使用水晶报表,如果你单是为了打印这个Grid的话。
就像杀鸡用了个牛刀一样,呵呵,而且是小鸡,而且是大牛刀
huisheng 2008-01-18
  • 打赏
  • 举报
回复
CrystalReport 不能实现吗?
阿泰 2008-01-18
  • 打赏
  • 举报
回复
这种需求不适合用水晶报表实现,一是水晶报表太贵,如果根本没打算正版那也算了
主要是动态实现起来相当麻烦
像这种要求,用Excel实现更方便

4,816

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧