Analytics

2010年7月29日 星期四

[C#]自訂義Dll CrystalReport Parameter 繫結分享(Custom righteous Dll Crystal Report Parameter tying Share)


問題

自訂義Dll CrystalReport Parameter 繫結分享



解決方法

以下class是我用來開發WinForm時所自己寫的
使用方式如下:
//實體化
SilanoLibForWin.CrystalReportLib cr = new SilanoLibForWin.CrystalReportLib();
//rpOrderForm是CrystalReport
//myFormDS是DataSet
rpOrderForm.SetDataSource(myFormDS);
//清除參數
cr.ClearParameter();
//傳入參數,注意,對應到報表的參數史以"參數的順序",名稱不重要
cr.SetReportParameter(mLoginUser);
//傳入值
cr.SetReportParameter("");
//傳入要繫結的報表
cr.BindReport(rpOrderForm);

程式碼如下:
using System; using System.Collections.Generic; using System.Text; using CrystalDecisions.Shared; using CrystalDecisions.CrystalReports.Engine;
namespace SilanoLibForWin
{   /// <summary>
    /// 提供報表設定參數
    /// </summary>
    public class CrystalReportLib
    {
        private List<string> mReportParamValue = new List<string>();
        /// <summary>
        /// 步驟1:
        /// 清除以繫結參數
        /// </summary>
        public void ClearParameter()
        {
            mReportParamValue.Clear();
        }

        /// <summary>
        /// 步驟2:
        /// 設定報表參數
        /// </summary>
        /// <param name="ParamValue"></param>
        public void SetReportParameter( string ParamValue)
        {
            mReportParamValue.Add(ParamValue);
        }

        /// <summary>
        /// 步驟3:
        /// 傳入報表以繫結參數
        /// </summary>
        /// <param name="mReportFile">傳回已繫結後的報表</param>
        public void BindReport(ReportDocument mReportFile)
        {
            int cnt = mReportFile.DataDefinition.ParameterFields.Count;
            for (int i = 0; i < cnt; i++)
            {
                ParameterValues myvals = new ParameterValues();
                ParameterDiscreteValue myDiscrete = new ParameterDiscreteValue();
                switch (mReportFile.DataDefinition.ParameterFields[i].ParameterValueKind)
                {
                    case CrystalDecisions.Shared.ParameterValueKind.DateTimeParameter:
                        myDiscrete.Value = Convert.ToDateTime(mReportParamValue[i].ToString());
                        break;
                    case CrystalDecisions.Shared.ParameterValueKind.BooleanParameter:
                        myDiscrete.Value = bool.Parse(mReportParamValue[i].ToString());
                        break;
                    case CrystalDecisions.Shared.ParameterValueKind.DateParameter:
                        myDiscrete.Value = Convert.ToDateTime(mReportParamValue[i].ToString());
                        break;
                    case CrystalDecisions.Shared.ParameterValueKind.NumberParameter:
                        myDiscrete.Value = int.Parse(mReportParamValue[i].ToString());
                        break;
                    case CrystalDecisions.Shared.ParameterValueKind.StringParameter:
                        myDiscrete.Value = Convert.ToString(mReportParamValue[i].ToString());
                        break;
                }
                myvals.Add(myDiscrete);
                mReportFile.DataDefinition.ParameterFields[i].ApplyCurrentValues(myvals);
            }
        }
    }
}

2 則留言:

匿名 提到...

Took me time to read the whole article, the article is great but the comments bring more brainstorm ideas, thanks.

- Johnson

silano.chen 提到...

Thanks for your response!
You inspire me too!!

-Silano

熱門文章