小魔女 发表于 2015-1-16 14:23:01

NET网页编程之静态完成水晶报表的表、列、和静态格线

以前很热炒跨平台,主要是由于硅谷挑战微软霸主地位的热情,但是冷静下来后,跨平台往往不是那么一回事。假设你有个软件,所谓的跨平台,你只需要为第二个平台上重新编译一次就行了,这样很难么?有良多良多次被问到:
为何水晶报表那末贫苦,每做一张报表都要选表,画线画格子,有无一种办法能够与日俱增?
做一个模板,然后用分歧的表都能用?
另有就是能不克不及静态选择列,并且选择列后能报表能主动合用这个变更?
乃至有些人也由于保持了水晶报表,实践上这些都是水晶报表能够做到的。</p><p>我之前曾零星地写过几篇,在论坛和博客中都曾重复解说过思绪,可是并没有体系地往办理这个成绩,在这里,我来说解一下道理和完成。
但愿该文章,能基础上办理这个成绩。固然,这个也不是全能的,也有其合用情况。
本文开辟情况:VS2005/CRXIR2for.Net
第一步:新建一个C#的水晶报表的WinForm空缺项目。在弹出报表数据源选择框的时分,不要选择任何任何数据源,间接点断定,创立一个空缺报表。
第二步:项目中增加一个Dataset1.xsd,手工创建一个DataTable,定名为BigTable。创建6个字段,全体为String型。
为何用6个呢?这个数字6切实其实立,是依据你的实践必要,这个表的列的数量,必要年夜于即是你所必要操纵的现实表的最年夜列数。
用为何用String型呢?我们晓得基础上一切的基本数据范例都能够转换为String,如许我们的这个表基础上能够包容一切的数据范例。
好了,在报表中增加这个Bigtable.

将6个字段拖到具体材料节。对齐。

注重!不要利用框和线来画格子,这里用的是字段边框,初度操纵能够临时不必,我前面会专门讲一下这个格线的处置。
好了,如许我们的全能模板就做成了。很复杂,是吗?呵呵。
第三步:在winform上拖上一个combox,一个button,用默许称号接口。
combox1用来选表的称号。

如许界面也完成了。
第四步:完成道理
下面的几步上去,有履历的伴侣基础上看出来我们是要用PUSH形式来完成了。
既然我们已在报内外用到了BigTable,那末我们要传送给报表的数据,也就要整构成BigTable的模样。
也就是说,只需能把来历数据表的数据,整构成BigTable的模样,就可以用这一个模板显现出来。
而不必管来历表从那里来,表名是甚么,有几个字段(可是字段数量必要小于即是6),字段名是甚么,有几数据。
从而到达全能的目标。

我把这个事情复杂封装了一下,做了个小办法。classclsDyCrystalReportCore
{
///<summary>
///将传进的datatable转换成报表模板所必要的datatable
///数据全体转换为string
///</summary>
///<paramname="dt">来历表</param>
///<returns>报表模板所必要的datatable</returns>
publicDataTabledtx(DataTabledt)
{
DataSet1.BigTatableDataTabledtx1=newDataSet1.BigTatableDataTable();
object[]obj=newobject;

//出格注重:所选择的表的列的数量需<=Bigtable的字段数量
//请自行填写回护代码
for(inti=0;i<dt.Rows.Count;i++)
{
dtx1.Rows.Add(dtx1.NewRow());

for(intj=0;j<dt.Columns.Count;j++)
{
dtx1.Rows=dt.Rows.ToString();
}
}
returndtx1;
}
}
就是来历表依照BigTable的布局写到BigTable内里往。很复杂的代码,但也是这个计划的中心。
第五步:功效完成。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Text;
usingSystem.Windows.Forms;
usingCrystalDecisions.Shared;
usingCrystalDecisions.CrystalReports.Engine;
usingCrystalDecisions.Windows.Forms;
usingSystem.Data.OleDb;
namespaceDyCrystalReportDemo
{
publicpartialclassForm1:Form
{
publicForm1()
{
InitializeComponent();
}

privatevoidbutton1_Click(objectsender,EventArgse)
{
StringtblName=comboBox1.Text;
Stringconnstr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="+System.Threading.Thread.GetDomain().BaseDirectory+"bbtcrall.mdb"+";";

if(tblName=="")
{
MessageBox.Show("请选择表名");
comboBox1.Focus();
return;
}

//翻开数据库毗连
DataTabledt1=newDataTable();
DataTabledtx=newDataTable();
OleDbDataAdapterda=newOleDbDataAdapter();
OleDbConnectioncn=newOleDbConnection(connstr);

//翻开选择的表(注重举行毛病回护)40
//假如要完成恣意列,只需变动此处的SQL为详细的字段便可
da=newOleDbDataAdapter("SELECT*From"+tblName,cn);
da.Fill(dt1);

//处置ds1
clsDyCrystalReportCorexCore=newclsDyCrystalReportCore();
dtx=xCore.dtx(dt1);

ReportDocumentmyReport=newReportDocument();
stringreportPath=System.Threading.Thread.GetDomain().BaseDirectory+"crystalreport1.rpt";
myReport.Load(reportPath);

//绑定命据集,注重,一个报表用一个数据集。54
myReport.SetDataSource(dtx);

crystalReportViewer1.ReportSource=myReport;
crystalReportViewer1.RefreshReport();
}

privatevoidForm1_Load(objectsender,EventArgse)
{
comboBox1.Items.Add("Test1_1");
comboBox1.Items.Add("Test1_2");
}
}
}

其他:
1:稍晚些我会把格线的处置完美一下
2:静态完成也能够利用开辟版或水晶报表2008用API增加,可是要比这个贫苦多了。
3:本例子不合用于年夜数据量操纵。
竟发现没有太大的帮助。总觉得要用起来,感觉到不了位。因为公司机器的原因,一直没有安装vs.net(也从来没有用过)。以前做asp的时候一直用DW(感觉其代码联想功能不错),可现在到了asp.net却不习惯了。

只想知道 发表于 2015-1-18 13:45:30

在一个项目中谁敢保证每天几千万甚至几亿条的数据不丢失?谁敢保证应用的高可靠性?有可以借签的项目吗?

乐观 发表于 2015-1-26 22:30:20

现在的ASP.net分为两个版本:1.1和2.0Asp.net1.1用VS2003(visualstudio2003)编程。Asp.net2.0用VS2005(visualstudio2005)编程。现在一般开发用的是VS2003。

莫相离 发表于 2015-2-4 23:57:20

由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA–WriteOnce,RunAnywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。

再现理想 发表于 2015-2-11 00:01:07

主流网站开发语言之ASP:ASP是微软(Microsoft)所开发的一种后台脚本语言,它的语法和VisualBASIC类似,可以像SSI(ServerSideInclude)那样把后台脚本代码内嵌到HTML页面中。虽然ASP简单易用,但是它自身存在着许多缺陷,最重要的就是安全性问题。

深爱那片海 发表于 2015-3-10 22:33:10

如今主流的Web服务器软件主要由IIS或Apache组成。IIS支持ASP且只能运行在Windows平台下,Apache支持PHP,CGI,JSP且可运行于多种平台,虽然Apache是世界使用排名第一的Web服务器平台。

再见西城 发表于 2015-3-17 12:09:30

主流网站开发语言之ASP:ASP是微软(Microsoft)所开发的一种后台脚本语言,它的语法和VisualBASIC类似,可以像SSI(ServerSideInclude)那样把后台脚本代码内嵌到HTML页面中。虽然ASP简单易用,但是它自身存在着许多缺陷,最重要的就是安全性问题。

第二个灵魂 发表于 2015-3-24 10:55:04

众所周知,Windows以易用而出名,也因此占据不少的服务器市场。
页: [1]
查看完整版本: NET网页编程之静态完成水晶报表的表、列、和静态格线