//由於測試數據不完善,featureClass在此要只設null值,真實功能要設實際的值 IFeatureClass featureClass = null; //獲取某個字段的索引,后面取字段值用到 int xxxFieldIdx = featureClass.FindField("xxx"); IFeatureCursor featureCursor = featureClass.Search(null, true); IFeature feature = null; //獲取到IWorkspaceEdit接口,IWorkspaceEdit是編輯必須的接口 IWorkspaceEdit workspaceEdit = (featureClass as IDataset).Workspace as IWorkspaceEdit; //開始編輯的兩個重要方法,StartEditing第一個參數是是否允許Undo,Redo(重做,撤銷),如果是后台數據處理功能一般關系不大 workspaceEdit.StartEditing(true); //構成一個EditOperation有StartEditOperation和StopEditOperation方法,Undo,Redo是針對一個EditOperation的 workspaceEdit.StartEditOperation(); //這里加try的原因是,如果編輯時出錯,需要調用IWorkspaceEdit的一些方法來回滾修改內容 //而且編輯出錯幾率比一般功能大 try { List<int> lstOid = new List<int>(); while ((feature = featureCursor.NextFeature()) != null) { //修改屬性字段的字段值 feature.Value[xxxFieldIdx] = "sss"; IPoint point = new PointClass(); point.PutCoords(111, 222); //修改幾何字段的字段值 //因為幾何字段只有一個,所以不需要字段索引 feature.Shape = point; //保存要素的修改 feature.Store(); //保存oid是為了之后的刪除要素功能 lstOid.Add(feature.OID); } System.Runtime.InteropServices.Marshal.FinalReleaseComObject(featureCursor); //刪除 //由於不能在遍歷要素時刪除要素,因此其中一種刪除要素的方法:是在遍歷時收集要刪除要素的oid,遍歷完后再通過oid進行刪除 foreach (int oid in lstOid) { //先通過oid獲取要素,然后調用要素的Delete方法刪除 IFeature featureDelete = featureClass.GetFeature(oid); featureDelete.Delete(); } //保存編輯 //之前的feature.Store()和featureDelete.Delete()都是臨時保存,下面兩句才是真實的保存 workspaceEdit.StopEditOperation(); //參數1是是否保存,false就是不保存,也就是恢復到修改前的狀態 workspaceEdit.StopEditing(true); } catch (Exception ex) { //編輯出錯需要以下兩句,大意是數據回滾 workspaceEdit.StopEditOperation(); workspaceEdit.StopEditing(false); //此處不記錄異常,把異常拋出讓系統統一處理 throw new Exception("", ex); }