漠漠黄沙 发表于 2018-1-10 08:50:45

请问这样绑定数据有什么问题?为何数据是空呢

private void button1_Click(object sender, EventArgs e)
      {
            GrapeCity.ActiveReports.PageReport rpt = new GrapeCity.ActiveReports.PageReport(new System.IO.FileInfo(@"PageReport1.rdlx"));
            rpt.Document.LocateDataSource += new GrapeCity.ActiveReports.LocateDataSourceEventHandler(locatedata1);
            GrapeCity.ActiveReports.Document.PageDocument rpdt = new GrapeCity.ActiveReports.Document.PageDocument(rpt);
            this.viewer1.LoadDocument(rpdt);
      }
      private void locatedata1(object cender, GrapeCity.ActiveReports.LocateDataSourceEventArgs args)
      {
            if (args.DataSourceName == "DataSource1" && args.DataSetName == "DataSet1")
            {
               DataSet ds =DBHelperSQL.Query("select * from Hj_basicinfo");
                args.Data = ds.Tables;
            }
      }
调试的时候发现方法 private void locatedata1并没有执行,在报表设计中预览也是没有数据。

KearneyKang 发表于 2018-1-10 09:20:06

您好!
您的意思是进行代码调试的时候 根本没有进入private void locatedata1(object cender, GrapeCity.ActiveReports.LocateDataSourceEventArgs args)这个函数是这样嘛?
如果是这样,这样肯定是会报错的,因为报表根本就没有绑定数据。您可以参考下面这段代码:
   public partial class WebForm1 : System.Web.UI.Page
    {
      protected void Page_Load(object sender, EventArgs e)
      {
            GrapeCity.ActiveReports.PageReport rpt = new GrapeCity.ActiveReports.PageReport(new System.IO.FileInfo(Server.MapPath(@"动态数据源.rdlx")));         
            rpt.Document.LocateDataSource += new GrapeCity.ActiveReports.LocateDataSourceEventHandler(locatedate);
            this.WebViewer1.Report = rpt;
      }
      private void locatedate(object sender, GrapeCity.ActiveReports.LocateDataSourceEventArgs args)
      {
            if (args.DataSourceName == "DataSource1")
            {
                if (args.DataSetName == "DataSet1")
                {
                  args.Data = returndata();
                }
            }
      }
      private DataTable returndata()
      {
            DataTable dt = new DataTable();
            dt.Columns.Add("产品编号");
            dt.Columns.Add("产品名称");
            dt.Columns.Add("单价");
            dt.Columns.Add("库存量");
            dt.Rows.Add("A001", "苹果", 10, 300);
            dt.Rows.Add("A002", "葡萄", 20, 200);
            dt.Rows.Add("A003", "香蕉", 30, 400);
            return dt;
      }


    }


漠漠黄沙 发表于 2018-1-11 09:35:19

KearneyKang 发表于 2018-1-10 09:20
您好!
您的意思是进行代码调试的时候 根本没有进入private void locatedata1(object cender, GrapeCity ...

我在winfrom程序里写的一段代码:请看下为什么还是没走locatedata1   这个方法
private void Form1_Load(object sender, EventArgs e)
      {
            GrapeCity.ActiveReports.PageReport rpt = new GrapeCity.ActiveReports.PageReport(new System.IO.FileInfo(@"PageReport1.rdlx"));
            rpt.Document.LocateDataSource += new GrapeCity.ActiveReports.LocateDataSourceEventHandler(locatedata1);
            GrapeCity.ActiveReports.Document.PageDocument rpdt = new GrapeCity.ActiveReports.Document.PageDocument(rpt);
            this.viewer1.LoadDocument(rpdt);
      }
      private void locatedata1(object cender, GrapeCity.ActiveReports.LocateDataSourceEventArgs args)
      {
            if (args.DataSourceName == "DataSource1")
            {
                if (args.DataSetName == "DataSet1")
                {
                  args.Data = GetData();
                }
            }
      }
      private DataTable GetData()
      {
            DataTable dt = new DataTable();
            dt.Columns.Add("Col1");
            dt.Columns.Add("Col2");
            dt.Columns.Add("Col3");
            dt.Rows.Add(1, 1, 1);
            dt.Rows.Add(2, 1, 1);
            dt.Rows.Add(3, 1, 1);
            dt.Rows.Add(4, 1, 1);
            dt.Rows.Add(5, 1, 1);
            dt.Rows.Add(6, 1, 1);
            return dt;
      }

KearneyKang 发表于 2018-1-11 14:02:56

您好!
您参考我附件的压缩文件,是一个Winform的动态绑定数据源的demo

漠漠黄沙 发表于 2018-1-13 09:00:46

KearneyKang 发表于 2018-1-11 14:02
您好!
您参考我附件的压缩文件,是一个Winform的动态绑定数据源的demo

非常感谢,问题已经解决了

KearneyKang 发表于 2018-1-15 09:24:32

好的!祝您工作愉快
页: [1]
查看完整版本: 请问这样绑定数据有什么问题?为何数据是空呢