在水晶报表中加载ArcEngine地图

  众所周知 , 水晶报表中动态更新, 只能通过与数据库的连接实现, 于是得出 , 若要将地图窗口的视图动态打印出来, 可以通过以下这种思路:

        1. 构建数据表,最好是在本地,避免网络耗时;在其中添加blob 字段。

        2. 程序中加载Crystal viewer ,与报表关联;

        3. 编程获取mapcontrol 的当前视图,并导出为图像格式;

        4. ArcEngine 导出的图片通过二进制格式读入到报表关联的数据库blob 字段中;

        5. 针对水晶报表中blob 字段对应的对象,则可以显示出欲打印的地图。  

        部分参考代码如下:

        private void simpleButton1_Click(object sender, System.EventArgs e)

        {

            IObjectCopy ObjectCopy = new ESRI.ArcGIS.esriSystem.ObjectCopyClass ();

            //输出图片代码

            Form2 frm = new Form2();

            frm.ShowDialog();

        }  

        private void Form2_Load(object sender, System.EventArgs e)

        {

            YSSQ cr = new YSSQ();

            DataSet ds = new DataSet ();             String path;

            DataColumn column = new DataColumn ();             DataRow row;  

            // 调整格式

            BlobFieldObject BObj;

            BObj = cr.ReportDefinition.ReportObjects["XMTB1" ] as BlobFieldObject;    

            // 构造一个对应于xsd 文件的表结构

            ds.Tables.Add("Map" );

            ds.Tables[0].Columns.Add("XMBH" , System.Type .GetType("System.String" ));

            ds.Tables[0].Columns.Add("XMTB" , System.Type .GetType("System.Byte[]" ));

            // 写入数据

            path = "1053.jpg" ;  

            row = ds.Tables[0].NewRow();

            row[0] = "J0000001" ;

            FileStream fs = new FileStream (path, FileMode .Open);// 获取文件流

            BinaryReader br = new BinaryReader (fs);// 创建二进制读取对象

            int len = (int )br.BaseStream.Length;

            row[1] = br.ReadBytes(len);

            ds.Tables[0].Rows.Add(row);

             br.Close();   fs.Close();  

            cr.SetDataSource(ds);

            this .crystalReportViewer1.ReportSource = cr;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值