ArcEngine文档保存填坑

18 篇文章 1 订阅
14 篇文章 1 订阅

描述

 一个mxd里面包含了图层以及做好的版式,在开发时对模板进行了操作,保存的时候发现只有把mapcontrol保存了,PageLayoutControl里面没有保存,找了好久找不到原因。后来找到原因很无语。先上源代码

  public void SaveProject()
        {
            try
            {
                string docPath = Hook.CurrentProject.Documentpath;
                string m_mapDocumentName = Hook.M_MapControl.DocumentFilename;
                //分为保存和另存为
                if (!string.IsNullOrEmpty(m_mapDocumentName))//保存
                {
                    //execute Save Document command
                    if (Hook.M_MapControl.CheckMxFile(m_mapDocumentName))
                    {
                        //create a new instance of a MapDocument
                        IMapDocument mapDoc = new MapDocumentClass();
                        mapDoc.Open(m_mapDocumentName, string.Empty);

                        //Make sure that the MapDocument is not readonly
                        if (mapDoc.get_IsReadOnly(m_mapDocumentName))
                        {

                            Hook.MainWindow.Invoke(new Action(() =>
                            {
                                Msg.Show("地图是只读的不能保存");
                            }));


                            mapDoc.Close();
                            return;
                        }
                        else
                        {
                            try
                            {
                                RenderTools.CopyAndOverwriteMap();//这个是讲mapcontrol里面的内容拷贝到pagelayoutcontrol里面的
                                Hook.MapTabControl.SelectedTabPageIndex = 1;
                               mapDoc.ReplaceContents((IMxdContents)Hook.M_PageControl.PageLayout);
                                mapDoc.ReplaceContents((IMxdContents)((MapControl)(Hook.M_MapControl.Object)).Map);
                                
                                mapDoc.Save(true, true);
                                mapDoc.Close();
                                Hook.MapTabControl.SelectedTabPageIndex = 0;
                                Hook.CurrentProject.isSave = true;
                            }
                            catch (Exception ex)
                            {

                            }
                        }
                    }
                }
                else
                {
                    ESRI.ArcGIS.SystemUI.ICommand cmd = new ESRI.ArcGIS.Controls.ControlsSaveAsDocCommand();
                    cmd.OnCreate(Hook.M_MapControl.Object);
                    cmd.OnClick();
                }
             
            }
            catch (Exception ex)
            {
                Logger.Log.Write("地图文档保存失败" + ex.Message);
            }


        }

  public static void CopyAndOverwriteMap()
        {
            IObjectCopy objectCopy = new ObjectCopyClass();//复制接口         
            object toCopyMap = Hook.M_MapControl.Map;//数据视图中的地图          
            object copiedMap = objectCopy.Copy(toCopyMap);//复制地图到缓存中           
            object toOverwriteMap = Hook.M_PageControl.ActiveView.FocusMap;//版面地图数据   
            Hook.M_PageControl.DocumentFilename = Hook.M_MapControl.DocumentFilename;
            objectCopy.Overwrite(copiedMap, ref toOverwriteMap);
            Hook.M_PageControl.ActiveView.Refresh();
            Hook.M_PageControl.ActiveView.Extent = Hook.M_PageControl.ActiveView.FullExtent;

        }

发现问题

pagelayoutCOntrol里面的东西没了

 

解决办法:

先替换mapcontrol,再替换pagelayoutcontrol

      mapDoc.ReplaceContents((IMxdContents)((MapControl)(Hook.M_MapControl.Object)).Map);
                                mapDoc.ReplaceContents((IMxdContents)Hook.M_PageControl.PageLayout);

 

后记

奇葩

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值