找回密码
 立即注册

QQ登录

只需一步,快速开始

kinber

中级会员

33

主题

89

帖子

533

积分

中级会员

积分
533

活字格认证微信认证勋章元老葡萄

kinber
中级会员   /  发表于:2015-3-31 13:14  /   查看:4279  /  回复:1
使用RDL报表,数据源为Sql Client,现在需要通过程序控制数据源的连接信息,如何实现?

1 个回复

倒序浏览
frank.zhang
社区贡献组   /  发表于:2015-3-31 13:59:00
沙发
您好,
需要使用动态数据源绑定。思路是动态构成SQL查询赋值成一个DataSet,报表绑定这个DataSet。
如果是web应用,需要绑定WebViewer1_LocateDataSource方法。其它环境下有类似的方法。
  1.         protected void WebViewer1_LocateDataSource(object sender, GrapeCity.ActiveReports.LocateDataSourceEventArgs args)
  2.         {
  3.             string productId =  args.Report.Parameters[0].Label;
  4.             //string productId = "1000";
  5.             string connStr = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};", Server.MapPath("/Data/Reels.mdb"));
  6.             string productSql = string.Format("SELECT * From Product where productId = {0}",productId);
  7.             DataLayer dl = new DataLayer(connStr, productSql);
  8.             args.Data = dl.DataSetData.Tables["Products"];
  9.         }
复制代码
  1.     internal sealed class DataLayer
  2.     {
  3.         private DataSet dataSetData;
  4.         public DataLayer(string connStr, string productSql)
  5.         {
  6.             LoadDataToDataSet(connStr, productSql);
  7.         }

  8.         public DataSet DataSetData
  9.         {
  10.             get { return dataSetData; }
  11.         }

  12.         private void LoadDataToDataSet(string connStr,string productSql)
  13.         {
  14.             dataSetData = new DataSet();
  15.             OleDbConnection conn = new OleDbConnection(connStr);
  16.             OleDbCommand cmd = new OleDbCommand(productSql, conn);
  17.             OleDbDataAdapter adapter = new OleDbDataAdapter();
  18.             adapter.SelectCommand = cmd;
  19.             adapter.Fill(dataSetData, "Products");
  20.         }
  21.     }
复制代码


可以参考以下博客
http://blog.gcpowertools.com.cn/ ... Source_RunTime.aspx
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部