水晶报表设计(四)----离散值、给水晶报表中多表赋值

   /// <summary>
        /// 获得报表参数信息
        /// </summary>
        private ParameterFields GetParameterFields()
        {
            ParameterFields fields = new ParameterFields();

            //单位、部门、人员、日期范围参数
            fields.Add(this.CreateParameterField("liushuihao", bllorder.GetMaxId()));
            string orve_year = bllChangeSeason.GetYear();
            string orve_season = bllChangeSeason.GetSeason();
            string jijie = orve_year + orve_season + "教材征订录入";
            fields.Add(this.CreateParameterField("jijie", jijie));

            //返回
            return fields;
        }


        /// <summary>
        /// 建立参数字段
        /// </summary>
        /// <param name="FieldName">字段名</param>
        /// <param name="FieldValue">字段值</param>
        /// <returns>参数字段</returns>
        private ParameterField CreateParameterField(string FieldName, object FieldValue)
        {
            ParameterField field = new ParameterField();
            ParameterDiscreteValue pvalue = new ParameterDiscreteValue();

            pvalue.Value = FieldValue;
            field.ParameterFieldName = FieldName;
            field.CurrentValues.Add(pvalue);

            //返回参数字段
            return field;
        }

 

//绑定时写

       this.CrystalReportViewer1.ParameterFieldInfo = this.GetParameterFields();      //参数信息
         

 

 一、离散值。

    在水晶报表的设计中,在有些情况下会遇到从界面向水晶报表传值的情况,也会有在格式化显示的情况下使用离散值。首先先看一下如何使用离散值。

    1、创建离散值

    在【参数字段管理器】中选择【参数字段】,并右击【新建】。这时会出现创建参数字段对话框。在默认情况下是选中【离散值】的。填写上名称(即参数名称,中英文都可),提示文本(根据实际情况进行填写,在没有必要的情况下可以不填写),选择好值类型。点击【确定】即可。这样在【参数字段】下就出现了我们创建的参数(假设我们创建的名称为:姓名)。我们将“姓名”拖到水晶报表界面上,形式为“?姓名”。

    2、向离散值进行传值

    传值需要代码进行控制,核心代码如下:

    //包含报表中每个参数字段的ParameterField对象。这里可以理解为得到界面上所有的参数字段。注意:在一个报表中,只需声明一次。

    ParameterFields paramFields = new ParameterFields();

    //获取和设置参数字段的选项和值。这里可以理解为创建实例。
    ParameterField paramFieldTCDDID = new ParameterField();

    //获取和设置离散值参数
    ParameterDiscreteValue discreteValp = new ParameterDiscreteValue();

    //设置离散值参数名:姓名
    paramFieldTCDDID.ParameterFieldName = "姓名";

    //赋值
    discreteValp.Value = Value;

    //添加值到离散值参数中
    paramFieldTCDDID.CurrentValues.Add(discreteValp);

    //将这个"实例"放回“集合”中。
    paramFields.Add(paramFieldTCDDID);

    //将“集合”返回到报表查看器。

    crystalReportViewer1.ParameterFieldInfo = paramFields;

   

    这样一个给离散值参数赋值的过程就做完了。

    二、当水晶报表中有多个表作为数据源时,如何一次性赋值。

    我们都知道,当水晶报表的数据源只有一个数据源时是很好解决赋值问题的,但是当水晶报表的数据源是多个表的时候我们要怎么做呢?

    我们都知道水晶报表的数据源类型为DataSet(DataTable)。那么我们可以根据这一特性进行操作。PUSH模式下,在创建的数据集文件中建立多个DataTable,对应水晶报表中要显示的多个表。这样一来,数据集文件和水晶报表的对应就做好了。比如说水晶报表上要显示三个表的内容,那么在数据集文件中就建立三个DataTable。接下来在代码中进行赋值控制。这时,我们返回的就不是Datatable了而是DataSet。我们是知道的,DataSet是DataTable的集合,那么我们将存储过程中返回的每一个表(即我们用到的那三个表)封装到DataSet中。需要注意的是Fill()中的表名需要和数据集文件中的表的名称相一致。这样,给水晶报表多个表显示数据传递数据源就完成了。

    代码:

    public static DataSet Rtp_TC_Select_Product(string value)
        {

            SqlConnection conn = DBConnect.GetConnection();
            DataSet ds = new DataSet();

            try
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand("TC_Rpt_Select_Product", conn);
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add("@value", SqlDbType.VarChar, 200).Value = value;

                SqlDataAdapter da = new SqlDataAdapter();
                da.SelectCommand = cmd;

                da.Fill(ds, "Product");

                //
                SqlCommand cmd1 = new SqlCommand("TC_Rpt_Select_TiaoKuan", conn);
                cmd1.CommandType = CommandType.StoredProcedure;

                cmd1.Parameters.Add("@value", SqlDbType.VarChar, 200).Value = value;

                //SqlDataAdapter da = new SqlDataAdapter();
                da.SelectCommand = cmd1;

                da.Fill(ds, "TiaoKuan");

                //
                SqlCommand cmd2 = new SqlCommand("TC_Rpt_Select_ZhuangYunQiXian", conn);
                cmd2.CommandType = CommandType.StoredProcedure;

                cmd2.Parameters.Add("@value", SqlDbType.VarChar, 200).Value = value;

                //SqlDataAdapter da = new SqlDataAdapter();
                da.SelectCommand = cmd2;

                da.Fill(ds, "zyqx");


            }
            catch
            {
            }
            finally
            {
                conn.Close();
            }

            return ds;
        }

    我们将返回的ds赋值给水晶报表就搞定了。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xm18love/archive/2010/01/11/5175558.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值