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(); } }
/// <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()); } }
/// <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); }
//将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()); } }
/// <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; } }
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); }