日期:2014-05-20  浏览次数:20936 次

求 水晶报表传递参数的例子!!!
VS2005 C# web 
  可以运行的,详细注释的例子,很急!!

目的:1. 在页面ddl控件中输入日期,单击Button, 报表显示符合该日期的内容;
  2. 根据后台查出的变量为条件,决定报表内容的显示。

  本人学浅,很菜,拜托各位前辈照顾下了!!!
  E-Mail :lxl.jsj@163.com

------解决方案--------------------
1. 在页面ddl控件中输入日期,单击Button, 报表显示符合该日期的内容; 

这是你程序根据日期去数据库提取数据,然后传给报表再显示


 2. 根据后台查出的变量为条件,决定报表内容的显示。 


这个不懂什么意思,要做动态的?
------解决方案--------------------
安装VS时如果选了CR,会在安装目录下带有详细的例子

一般位于如下位置:
D:\Program Files\Microsoft Visual Studio 9.0\Crystal Reports\Samples\

我装的是2008,所以与你的位置可能稍微有些不同

是个压缩包,解压缩

每个例子都用VB.Net/C# 做了APP模式和WEB模式

比如说参数这个,名字叫

CS_Win_RDObjMod_Parameters
CS_Web_RDObjMod_Parameters

虽然跟你的要求不完全一样,但是原理足够了~~
------解决方案--------------------
C# code
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;


public partial class _Default : System.Web.UI.Page 
{
    private const string PARAMETER_FIELD_NAME = "City";

    
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    private void Page_Init(object sender, EventArgs e)
    {
        ConfigureCrystalReports();
    }


    private void ConfigureCrystalReports()
    {
        ArrayList arrayList = new ArrayList();
        string reportPath = Server.MapPath("CustomersByCity.rpt");
        crystalReportViewer.ReportSource = reportPath;
        ParameterFields parameterFields = crystalReportViewer.ParameterFieldInfo;

        if (!IsPostBack)
        {
            defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(parameterFields);
            defaultParameterValuesList.DataBind();
            arrayList.Add("Paris");
            arrayList.Add("Tokyo");
            Session["arrayList"] = arrayList;
        }
        else
        {
            arrayList = (ArrayList)Session["arrayList"];
        }
        
        SetCurrentValuesForParameterField(parameterFields, arrayList);

    }
    
    private void SetCurrentValuesForParameterField(ParameterFields parameterFields, ArrayList arrayList)
    {
        ParameterValues currentParameterValues = new ParameterValues();
        foreach (object submittedValue in arrayList)
        {
            ParameterDiscreteValue parameterDiscreteValue = new ParameterDiscreteValue();
            parameterDiscreteValue.Value = submittedValue.ToString();
            currentParameterValues.Add(parameterDiscreteValue);
        }

        ParameterField parameterField = parameterFields[PARAMETER_FIELD_NAME];
        parameterField.CurrentValues = currentParameterValues;

    }

    private ArrayList GetDefaultValuesFromParameterField(ParameterFields parameterFields)
    {
        ParameterField parameterField = parameterFields[PARAMETER_FIELD_NAME];
        ParameterValues defaultParameterValues = parameterField.DefaultValues;
        ArrayList arrayList = new ArrayList();
        foreach (ParameterValue parameterValue in defaultParameterValues)
        {
            if (!parameterValue.IsRange)
            {
                ParameterDiscreteValue parameterDiscreteValue = (ParameterDiscreteValue)parameterValue;
                arrayList.Add(parameterDiscreteValue.Value.ToString());
            }
        }

        return arrayList;
    }

    protected void redisplay_Click(object sender, EventArgs e)
    {
        ArrayList arrayList = new ArrayList();
        foreach (ListItem item in defaultParameterValuesList.Items)
        {
            if (item.Selected)
            {
                arrayList.Add(item.Value);
            }
        }

        Session["arrayList"] = arrayList;
        ConfigureCrystalReports();
    }
}