private void StartEditing()
        {
            GetCurrentLayer();
            if (m_CurrentLayer == null)
            {
                return;
            }
            if ((IGeoFeatureLayer)m_CurrentLayer == null)
            {
                return;
            }

            IFeatureLayer pFeatureLayer = (IFeatureLayer)m_CurrentLayer;
            IDataset      pDataset      = (IDataset)pFeatureLayer.FeatureClass;

            if (pDataset == null)
            {
                return;
            }

            IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pDataset.Workspace;

            if (!pWorkspaceEdit.IsBeingEdited())
            {
                pWorkspaceEdit.StartEditing(true);
                pWorkspaceEdit.EnableUndoRedo();
            }
        }
예제 #2
0
        /// <summary>
        /// 开始编辑,使工作空间处于可编辑状态
        /// 在进行图层编辑前必须调用本方法
        /// </summary>
        public void StartEditing()
        {
            try
            {
                if (m_pCurrentLayer == null)
                {
                    return;
                }

                if (!(m_pCurrentLayer is IGeoFeatureLayer))
                {
                    return;
                }

                IFeatureLayer pFeatureLayer = (IFeatureLayer)m_pCurrentLayer;
                IDataset      pDataset      = (IDataset)pFeatureLayer.FeatureClass;
                if (pDataset == null)
                {
                    return;
                }

                // 开始编辑,并设置Undo/Redo 为可用
                IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pDataset.Workspace;
                if (!pWorkspaceEdit.IsBeingEdited())
                {
                    pWorkspaceEdit.StartEditing(true);
                    pWorkspaceEdit.EnableUndoRedo();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message.ToString());
            }
        }
예제 #3
0
        /// <summary>
        /// 开始编辑
        /// </summary>
        /// <param name="player"></param>
        public static void StartEditing(ILayer player, string strOperator)
        {
            // 开始编辑前检查编辑状态
            m_strOperator  = strOperator;
            m_CurrentLayer = player;
            if (m_CurrentLayer == null)
            {
                return;
            }

            if ((IGeoFeatureLayer)m_CurrentLayer == null)
            {
                return;
            }
            IFeatureLayer pFeatureLayer = (IFeatureLayer)m_CurrentLayer;
            IDataset      pDataset      = (IDataset)pFeatureLayer.FeatureClass;

            if (pDataset == null)
            {
                return;
            }

            // Start editing, making sure that undo/redo are enabled
            pWorkspaceEdit = (IWorkspaceEdit)pDataset.Workspace;
            if (!pWorkspaceEdit.IsBeingEdited())
            {
                try
                {
                    pWorkspaceEdit.StartEditing(true);
                    pWorkspaceEdit.StartEditOperation();
                    pWorkspaceEdit.EnableUndoRedo();
                }
                catch
                {
                    if (pWorkspaceEdit.IsBeingEdited())
                    {
                        pWorkspaceEdit.StopEditOperation();
                        pWorkspaceEdit.StopEditing(true);
                        pWorkspaceEdit.StartEditing(true);
                        pWorkspaceEdit.StartEditOperation();
                        pWorkspaceEdit.EnableUndoRedo();
                    }
                }
            }
        }
        public bool StopEditing(IWorkspace TheWorkspace)
        {
            IWorkspaceEdit pWSEdit = (IWorkspaceEdit)TheWorkspace;

            pWSEdit.StopEditOperation();
            pWSEdit.EnableUndoRedo();
            pWSEdit.StopEditing(true);
            return(true);
        }
        public bool AbortEditing(IWorkspace TheWorkspace)
        {
            IWorkspaceEdit pWSEdit = (IWorkspaceEdit)TheWorkspace;

            pWSEdit.AbortEditOperation();
            pWSEdit.EnableUndoRedo();
            if (pWSEdit.IsBeingEdited())
            {
                pWSEdit.StopEditing(false);
            }
            return(true);
        }
예제 #6
0
 //将feature的工作空间编辑状态打开
 public void StartEditing(IFeature pFeature)
 {
     try
     {
         IFeatureClass pFC      = pFeature.Table as IFeatureClass;
         IDataset      pDataset = pFC as IDataset;
         if (pDataset == null)
         {
             return;
         }
         // 开始编辑,并设置Undo/Redo 为可用
         IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pDataset.Workspace;
         if (!pWorkspaceEdit.IsBeingEdited())
         {
             pWorkspaceEdit.StartEditing(true);
             pWorkspaceEdit.EnableUndoRedo();
         }
     }
     catch (Exception e)
     {
         Console.WriteLine(e.Message.ToString());
     }
 }
예제 #7
0
        /// <summary>
        /// 联动更新函数
        /// </summary>
        /// <param name="orgFea">参照要素</param>
        /// <param name="objFea">目标更新要素</param>
        /// <param name="pObjFeaClss">目标更新要素类</param>
        /// <param name="pObjWS">目标工作空间</param>
        /// <param name="fromDate">目标工作空间</param>
        /// <param name="pUpdateType">更新类型,新增、修改、删除</param>
        /// <param name="pError">异常</param>
        public static void UpdateFea(IMap pMap, IFeature orgFea, IFeature objFea, IFeatureClass pObjFeaClss, IWorkspace pObjWS, EnumUpdateType pUpdateType, out Exception pError)
        {
            pError = null;                                     //异常
            string pFeaClsName = "";                           //更新要素类 名称
            int    pVersion    = -1;                           //版本信息

            pFeaClsName = (pObjFeaClss as IDataset).Name;      //目标图层名

            IWorkspaceEdit pWsEdit = pObjWS as IWorkspaceEdit; //目标编辑工作空间

            if (pObjWS.WorkspaceFactory.WorkspaceType == esriWorkspaceType.esriRemoteDatabaseWorkspace)
            {
                //工作空间是SDE类型

                //开启编辑
                if (!pWsEdit.IsBeingEdited())
                {
                    try
                    {
                        pWsEdit.StartEditing(true);   //开启编辑
                        pWsEdit.EnableUndoRedo();
                        pWsEdit.StartEditOperation(); //开启会话
                    }
                    catch (Exception e)
                    {
                        //*******************************************************************
                        //Exception Log
                        if (ModData.SysLog == null)
                        {
                            ModData.SysLog = new SysCommon.Log.clsWriteSystemFunctionLog();
                        }
                        ModData.SysLog.Write(e, null, DateTime.Now);
                        //********************************************************************
                        pError = new Exception("不能编辑该工作空间,请检查是否为只读或被其它用户占用!");
                        return;
                    }
                }

                //IFeatureDataset pFeaDataset = pObjFeaClss.FeatureDataset;
                //if (pFeaDataset != null)
                //{
                //    IVersionedObject pVerObj = pFeaDataset as IVersionedObject;
                //    if (pVerObj.IsRegisteredAsVersioned)
                //    {
                //        //反注册
                //        pVerObj.RegisterAsVersioned(false);
                //    }
                //}

                //获得版本信息
                pVersion = GetVersion(pObjWS, out pError);
                if (pError != null)
                {
                    return;
                }
            }
            DateTime fromDate = DateTime.Now;  //更新时间

            if (pUpdateType == EnumUpdateType.新增)
            {
                #region 新增操作
                if (orgFea == null)
                {
                    pError = new Exception("请选择参照要素");
                    return;
                }
                //在目标图层中创建一个新的要素
                IFeature newFea = pObjFeaClss.CreateFeature();

                //给创建的要素的几何字段赋值
                newFea.Shape = orgFea.ShapeCopy;
                //给创建的要素的属性字段赋值

                try
                {
                    //保存要素
                    newFea.Store();
                }
                catch (Exception pEx)
                {
                    //*******************************************************************
                    //Exception Log
                    if (ModData.SysLog == null)
                    {
                        ModData.SysLog = new SysCommon.Log.clsWriteSystemFunctionLog();
                    }
                    ModData.SysLog.Write(pEx, null, DateTime.Now);
                    //********************************************************************
                    pError = new Exception("新增要素出错,\n原因:" + pEx.Message);
                    return;
                }
                if (pObjWS.WorkspaceFactory.WorkspaceType == esriWorkspaceType.esriRemoteDatabaseWorkspace)
                {
                    //停止编辑
                    pWsEdit.StartEditOperation();
                    pWsEdit.StopEditing(true);

                    //更新历史、日志记录表
                    RecordLOG(pObjWS, newFea as IRow, 1, fromDate, pVersion, pFeaClsName, out pError);
                    if (pError != null)
                    {
                        return;
                    }
                }
                #endregion
            }
            else if (pUpdateType == EnumUpdateType.修改)
            {
                #region 修改操作
                if (orgFea == null)
                {
                    pError = new Exception("请选择参照要素");
                    return;
                }
                if (objFea == null)
                {
                    pError = new Exception("请选择更新要素");
                    return;
                }
                //***********************************************************************
                //guozheng added
                if (objFea.Shape.GeometryType != orgFea.Shape.GeometryType)
                {
                    pError = new Exception("源要素与目标要素几何不一致,未能修改。");
                    return;
                }
                //***********************************************************************
                //给几何字段赋值
                objFea.Shape = orgFea.ShapeCopy;
                //给属性字段赋值,暂时未能实现

                try
                {
                    //对修改的要素进行存储
                    objFea.Store();
                }
                catch (Exception pEx)
                {
                    //*******************************************************************
                    //Exception Log
                    if (ModData.SysLog == null)
                    {
                        ModData.SysLog = new SysCommon.Log.clsWriteSystemFunctionLog();
                    }
                    ModData.SysLog.Write(pEx, null, DateTime.Now);
                    //********************************************************************
                    pError = new Exception("修改要素出错,\n原因:" + pEx.Message);
                    return;
                }


                if (pObjWS.WorkspaceFactory.WorkspaceType == esriWorkspaceType.esriRemoteDatabaseWorkspace)
                {
                    pWsEdit.StopEditOperation();
                    pWsEdit.StopEditing(true);


                    //更新历史、日志记录表
                    RecordLOG(pObjWS, objFea as IRow, 2, fromDate, pVersion, pFeaClsName, out pError);
                    if (pError != null)
                    {
                        return;
                    }
                }
                #endregion
            }
            else
            {
                #region  除操作
                if (objFea == null)
                {
                    pError = new Exception("请选择要删除的要素");
                    return;
                }
                //删除要素

                //查找要删除的要素
                IQueryFilter pFilter = new QueryFilterClass();
                pFilter.WhereClause = "OBJECTID=" + objFea.OID;
                ITable pTable = pObjFeaClss as ITable;
                try
                {
                    //删除要素
                    pTable.DeleteSearchedRows(pFilter);
                }
                catch (Exception pEx)
                {
                    //*******************************************************************
                    //Exception Log
                    if (ModData.SysLog == null)
                    {
                        ModData.SysLog = new SysCommon.Log.clsWriteSystemFunctionLog();
                    }
                    ModData.SysLog.Write(pEx, null, DateTime.Now);
                    //********************************************************************
                    pError = new Exception("删除要素出错,\n原因:" + pEx.Message);
                    return;
                }

                if (pObjWS.WorkspaceFactory.WorkspaceType == esriWorkspaceType.esriRemoteDatabaseWorkspace)
                {
                    pWsEdit.StopEditOperation();
                    pWsEdit.StopEditing(true);


                    //更新历史库和日志记录表
                    RecordLOG(pObjWS, objFea.OID, fromDate, pVersion, pFeaClsName, out pError);
                    if (pError != null)
                    {
                        return;
                    }
                }
                #endregion
            }


            //更新版本信息

            if (pObjWS.WorkspaceFactory.WorkspaceType == esriWorkspaceType.esriRemoteDatabaseWorkspace)
            {
                //更新版本信息
                WriteDBVersion(pObjWS, pVersion, fromDate, out pError);
            }

            if (pError != null)
            {
                return;
            }
        }
예제 #8
0
        public override void OnClick()
        {
            IWorkspace pCurWorkspace = null;// m_CurWorkspace;

            //当工作空间为多个时需提供选择对话框
            if (m_AllLayers == null || m_AllLayers.Count == 0)
            {
                return;
            }
            if (m_AllLayers.Count > 1)
            {
                FrmStartEdit frmStarEdit = new FrmStartEdit();
                frmStarEdit.AllEditInfo = m_AllLayers;
                frmStarEdit.ShowDialog();
                if (frmStarEdit.DialogResult == DialogResult.OK)
                {
                    pCurWorkspace = frmStarEdit.SelectWorkspace;
                }
                else
                {
                    return;
                }
            }
            else
            {
                foreach (IWorkspace pWorkspace in m_AllLayers.Keys)
                {
                    pCurWorkspace = pWorkspace;
                }
            }

            if (pCurWorkspace == null)
            {
                return;
            }

            //================================================================
            //chenyafei  20110105  add:在编辑前注册版本
            //只针对SDE数据
            if (pCurWorkspace.WorkspaceFactory.WorkspaceType != esriWorkspaceType.esriRemoteDatabaseWorkspace)
            {
                //若不是SDE数据,则不允许编辑
                SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "请加载SDE数据进行编辑");
                return;
            }
            //只针对注册版本的数据
            IEnumDataset pEnumDataset = pCurWorkspace.get_Datasets(esriDatasetType.esriDTFeatureDataset);

            if (pEnumDataset == null)
            {
                return;
            }

            IDataset pFeaDt = pEnumDataset.Next();

            while (pFeaDt != null)
            {
                if (pFeaDt.Name.ToUpper().EndsWith("_GOH"))
                {
                    pFeaDt = pEnumDataset.Next();
                    continue;
                }
                IVersionedObject pVerObj = pFeaDt as IVersionedObject;
                if (!pVerObj.IsRegisteredAsVersioned)
                {
                    //注册版本
                    if (SysCommon.Error.ErrorHandle.ShowFrmInformation("是", "否", "该数据还未注册版本,是否注册版本以便进行编辑?"))
                    {
                        pVerObj.RegisterAsVersioned(true);
                        break;
                    }
                    else
                    {
                        return;
                    }
                }
                //else
                //{
                //    pVerObj.RegisterAsVersioned(false);
                //}
                pFeaDt = pEnumDataset.Next();
            }

            //==================================================================

            IWorkspaceEdit pWorkspaceEdit = pCurWorkspace as IWorkspaceEdit;

            if (!pWorkspaceEdit.IsBeingEdited())
            {
                try
                {
                    pWorkspaceEdit.StartEditing(true);
                    pWorkspaceEdit.EnableUndoRedo();
                }
                catch (Exception eError)
                {
                    //******************************************
                    //guozheng added System Exception log
                    if (SysCommon.Log.Module.SysLog == null)
                    {
                        SysCommon.Log.Module.SysLog = new SysCommon.Log.clsWriteSystemFunctionLog();
                    }
                    SysCommon.Log.Module.SysLog.Write(eError);
                    //******************************************
                    SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "不能编辑该工作空间,请检查是否为只读或被其它用户占用!");
                    return;
                }
            }

            MoData.v_CurWorkspaceEdit = pWorkspaceEdit;

            //将开启编辑的图层加到图层下拉框中
            if (Plugin.ModuleCommon.DicCommands.ContainsKey("GeoEdit.LayerControl"))
            {
                LayerControl pLayerControl = Plugin.ModuleCommon.DicCommands["GeoEdit.LayerControl"] as LayerControl;
                if (pLayerControl != null)
                {
                    pLayerControl.GetLayers();
                }
            }
            //******************************************************************
            //guozheng 2010-11-4 added 开启编辑成功后获取当前的数据库版本
            Exception ex = null;
            clsUpdataEnvironmentOper UpOper = new clsUpdataEnvironmentOper();

            UpOper.HisWs     = pCurWorkspace;
            MoData.DBVersion = UpOper.GetVersion(out ex);
            if (ex != null)
            {
                SysCommon.Error.ErrorHandle.ShowFrmErrorHandle("提示", "获取数据库版本失败。\n原因:" + ex.Message);
            }
            //******************************************************************
            ////打开日志记录表,开启事务
            //Exception exError = null;
            //XmlNode DBNode = m_Hook.DBXmlDocument.SelectSingleNode(".//数据库工程");
            //XmlElement DBElement = DBNode as XmlElement;
            //string strLogMdbPath = DBElement.GetAttribute("路径") + "\\Log\\更新日志.mdb";
            //MoData.v_LogTable = new SysCommon.DataBase.SysTable();
            //MoData.v_LogTable.SetDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strLogMdbPath+";Mode=Share Deny None;Persist Security Info=False", SysCommon.enumDBConType.OLEDB, SysCommon.enumDBType.ACCESS, out exError);
            //MoData.v_LogTable.StartTransaction();

            //委托主窗体关闭事件
            Plugin.Application.IAppFormRef pAppFormRef = m_Hook as Plugin.Application.IAppFormRef;
            pAppFormRef.MainForm.FormClosing += new FormClosingEventHandler(MainForm_FormClosing);
        }