//因为测试数据不完善,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); }