

using CrystalDecisions.Shared;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Windows.Forms;Click事件代码:
private void button1_Click(object sender, EventArgs e)
{
String cnstr = "";
//保持字段的字符串
String fldstr = "";
//保持字段名称的数组
String[] fldArr=new string[6] ;
int i = 0;
int j = 0;

//---------------------------------------------------------------------
//获取选取的字段并进行处理
if (checkBox1.Checked == true)
fldstr = fldstr + "," + checkBox1.Text;
if (checkBox2.Checked == true)
fldstr = fldstr + "," + checkBox2.Text;
if (checkBox3.Checked == true)
fldstr = fldstr + "," + checkBox3.Text;
if (checkBox4.Checked == true)
fldstr = fldstr + "," + checkBox4.Text;
if (checkBox5.Checked == true)
fldstr = fldstr + "," + checkBox5.Text;
if (checkBox6.Checked == true)
fldstr = fldstr + "," + checkBox6.Text;

if (fldstr == "")
{
MessageBox.Show("请选择要显示的字段");
return;
}
if (fldstr.Substring(0, 1) == ",")
fldstr = fldstr.Substring(1, fldstr.Length - 1);

fldArr = fldstr.Split(new Char[]
{','});
cnstr= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + "\\BBT_Crystal.mdb" ;
OleDbConnection cn=new OleDbConnection(cnstr);
cn.Open();
string sql="";
sql=" Select " + fldstr + " From 材料采购明细" ;
OleDbDataAdapter da1=new OleDbDataAdapter(sql,cn);
DataSet ds1=new DataSet();
da1.Fill(ds1, "材料采购明细");

CrystalReport1 crReportDocument=new CrystalReport1();

for(i=0;i<fldArr.Length;i++)
{
// 将公式绑定到具体字段
crReportDocument.DataDefinition.FormulaFields["mf" + (i + 1).ToString()].Text = "{材料采购明细." + fldArr[i] +"}" ;
crReportDocument.DataDefinition.FormulaFields["mt" + (i + 1).ToString()].Text = "\"" + fldArr[i] + "\"";
}
for (j =i+ 1; j <= 6; j++)
{
crReportDocument.DataDefinition.FormulaFields["mt" + (j).ToString()].Text = "";
}
crReportDocument.SetDataSource(ds1);
crystalReportViewer1.ReportSource=crReportDocument; 
}
使用公式构造表头字段节约了不少代码,呵呵。
当然这只是个程序模型~~
发表于 @ 2008年09月03日 10:03:00 | 评论( loading... ) | 举报| 收藏