ArcEngine文檔保存填坑

描述

 一個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);

 

後記

奇葩

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章