kinber 发表于 2015-3-31 13:14:00

RDL报表如何在运行时改变数据源

使用RDL报表,数据源为Sql Client,现在需要通过程序控制数据源的连接信息,如何实现?

frank.zhang 发表于 2015-3-31 13:59:00

您好,
需要使用动态数据源绑定。思路是动态构成SQL查询赋值成一个DataSet,报表绑定这个DataSet。
如果是web应用,需要绑定WebViewer1_LocateDataSource方法。其它环境下有类似的方法。
      protected void WebViewer1_LocateDataSource(object sender, GrapeCity.ActiveReports.LocateDataSourceEventArgs args)
      {
            string productId =args.Report.Parameters.Label;
            //string productId = "1000";
            string connStr = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};", Server.MapPath("/Data/Reels.mdb"));
            string productSql = string.Format("SELECT * From Product where productId = {0}",productId);
            DataLayer dl = new DataLayer(connStr, productSql);
            args.Data = dl.DataSetData.Tables["Products"];
      }
    internal sealed class DataLayer
    {
      private DataSet dataSetData;
      public DataLayer(string connStr, string productSql)
      {
            LoadDataToDataSet(connStr, productSql);
      }

      public DataSet DataSetData
      {
            get { return dataSetData; }
      }

      private void LoadDataToDataSet(string connStr,string productSql)
      {
            dataSetData = new DataSet();
            OleDbConnection conn = new OleDbConnection(connStr);
            OleDbCommand cmd = new OleDbCommand(productSql, conn);
            OleDbDataAdapter adapter = new OleDbDataAdapter();
            adapter.SelectCommand = cmd;
            adapter.Fill(dataSetData, "Products");
      }
    }

可以参考以下博客
http://blog.gcpowertools.com.cn/post/2014/08/01/ActiveReports_DataSource_RunTime.aspx
页: [1]
查看完整版本: RDL报表如何在运行时改变数据源