动态生成水晶报表
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
这两天学习如何生成动态水晶报表,看了网上的一些资料,觉得讲得都不是很详细。今天晚上做一个小的实例,算是对这两天学习的总结吧。
先让我们来看一下现实现的步骤:
一、新建一个项目:
二、向项目中添加Crystal 报表和DataSet 数据集,报表使用专家向导,在DataSet 数据集中添加一个表,为表添加八列,都使用默认名。
三、为CrystalReport1 设置数据库字段与参数字段。
四:实现代码:
using System;
using System.Collections.Generic;
using ponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.ReportSource;
using CrystalDecisions.Shared;
using CrystalDecisions.Windows.Forms;
/**//**//**////
/// 动态生成水晶报表
///
/// 王稳嵩
///
/// 2007-10-23
///
namespace WindowsApplication4
......{
public partial class Form1 : Form
......{
CrystalReport1 CrystalReport11;
ParameterFields paramFields;//定义一个参数字段集对象
ParameterField paramField; //定义一个参数字段列表对象
ParameterDiscreteValue paramDiscreteValue; //定义离散值参数对象
DataSet1 ds1;
SqlConnection conn = new SqlConnection("server=(local);Integrated Security = SSPI; database = Northwind");
public Form1()
......{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
......{
this.cmbSqlstring.Items.Add("select orderid,customerid from orders");
this.cmbSqlstring.Items.Add("select * from Orders");
this.cmbSqlstring.Items.Add("select * from Products");
this.cmbSqlstring.Items.Add("等等");
}
private void butQuery_Click(object sender, EventArgs e)
......{
if (this.cmbSqlstring.Text != "")
......{
if (this.cmbSqlstring.Text == "等等")
......{
MessageBox.Show("兄弟您可真幽默,没有这样的sql语句吧");
return;
}
this.dataGridView1.Columns.Clear();
try
......{
SqlDataAdapter da = new SqlDataAdapter(this.cmbSqlstring.Text.Trim(), conn);
ds1 = new DataSet1();
da.Fill(ds1, "DataTable1");
for (int i = 1; i < 9; i++)
......{
ds1.Tables[0].Columns.Remove("Column" + i.ToString());//删除DataSet1数据集中的预
定义表DataTable1 中预定义的8列columns1 ……;
}
this.dataGridView1.DataSource = ds1.Tables[0];
}
catch (SqlException sqlEX)
......{
MessageBox.Show(sqlEX.Message);
}
catch (Exception Ex)
......{
MessageBox.Show(Ex.Message);
}
}
else
......{
MessageBox.Show("sql语句不能为空");
}
}
private void butPrint_Click(object sender, EventArgs e)
......{
try
......{
if (this.dataGridView1.DataSource != null)
......{
paramFields = new ParameterFields();
if (this.ds1.Tables[0].Columns.Count >= 8)
......{
//查询结果中表的列数大于等于八列时
for (int i =, 1; i < 9; i++)
......{
paramField = new ParameterField();
= "col" + i.ToString(); //设置对象参数字段对象名