Arcgis Engine(ae)接口詳解(3):featureClass的feature編輯和刪除


                //由於測試數據不完善,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);
                }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM