C#在水晶报表中加载ArcEngine地图

 

在水晶报表中加载ArcEngine地图

        众所周知

        水晶报表中动态更新

        只能通过与数据库的连接实现

 

        于是得出

        若要将地图窗口的视图动态打印出来

        可以通过以下这种思路:

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

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

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

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

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

 

        部分参考代码如下:

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

        {

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

            ESRI.ArcGIS.Carto.IActiveView View0;

            View0 = this.axMapControl1.ActiveView;

            //导出图片

            ESRI.ArcGIS.Output.IExport Export;

            Export = new ESRI.ArcGIS.Output.ExportJPEGClass();

            Export.ExportFileName = "1053.jpg";

            //Export.Resolution = 96;

 

            ESRI.ArcGIS.Display.tagRECT exportRec;

            exportRec = View0.ExportFrame;

            ESRI.ArcGIS.Geometry.IEnvelope Bounds = new ESRI.ArcGIS.Geometry.EnvelopeClass();

            Bounds.PutCoords(exportRec.left, exportRec.top, exportRec.right, exportRec.bottom);

            Export.PixelBounds = Bounds;

 

            int hdc;

            hdc = Export.StartExporting();

 

            View0.Output(hdc, 96, ref exportRec, null, null);

 

            Export.FinishExporting();

            Export.Cleanup();

 

            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;

 

 

        }

来自:http://www.cnblogs.com/columbus2/archive/2007/08/02/840325.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值