private void DeleteFeatures(object param) { IFeatureClass featureClass = null; IDataSource dataSource = null; IFeatureDataSet featureDataSet = null; try { EditParameters editParameters = (EditParameters)param; DF3DFeatureClass featureClassInfo = DF3DFeatureClassManager.Instance.GetFeatureClassByID(editParameters.featureClassGuid); string fcName = editParameters.fcName; if (!string.IsNullOrEmpty(fcName) && featureClassInfo != null) { dataSource = ((IDataSourceFactory) new DataSourceFactoryClass()).OpenDataSourceByString(editParameters.connectionInfo); featureDataSet = dataSource.OpenFeatureDataset(editParameters.datasetName); int nTotalCount = editParameters.nTotalCount; int num = 0; featureClass = featureDataSet.OpenFeatureClass(fcName); string geometryFieldName = featureClassInfo.GetFeatureLayer().GeometryFieldName; featureClass.SetRenderIndexEnabled(geometryFieldName, false); if (featureClass.HasTemporal() && CommonUtils.Instance().EnableTemproalEdit) { System.DateTime temproalTime = editParameters.TemproalTime; TemporalFilter temporalFilter = new TemporalFilterClass(); temporalFilter.AddSubField(featureClass.FidFieldName); temporalFilter.IdsFilter = editParameters.fidList; ITemporalManager temporalManager = featureClass.TemporalManager; ITemporalCursor temporalCursor = temporalManager.Search(temporalFilter); while (temporalCursor.MoveNext()) { temporalCursor.Dead(temproalTime); num++; string userState = string.Format(StringParser.Parse("${res:feature_progress_delete}"), num, nTotalCount); int percentProgress = num * 100 / nTotalCount; this._bgWorker.ReportProgress(percentProgress, userState); } System.Runtime.InteropServices.Marshal.ReleaseComObject(temporalCursor); System.Runtime.InteropServices.Marshal.ReleaseComObject(temporalManager); } else { featureClass.FeatureDataSet.DataSource.StartEditing(); IFdeCursor fdeCursor = featureClass.Update(new QueryFilterClass { IdsFilter = editParameters.fidList }); while (fdeCursor.NextRow() != null && !this._bgWorker.CancellationPending) { fdeCursor.DeleteRow(); num++; string userState2 = string.Format(StringParser.Parse("${res:feature_progress_delete}"), num, nTotalCount); int percentProgress2 = num * 100 / nTotalCount; this._bgWorker.ReportProgress(percentProgress2, userState2); } System.Runtime.InteropServices.Marshal.ReleaseComObject(fdeCursor); featureClass.FeatureDataSet.DataSource.StopEditing(true); } if (this._progressDlg.Created) { string userState3 = StringParser.Parse("${res:feature_progress_updateindex}"); int percentProgress3 = num * 100 / nTotalCount; this._bgWorker.ReportProgress(percentProgress3, userState3); } featureClass.SetRenderIndexEnabled(geometryFieldName, true); featureClass.RebuildRenderIndex(geometryFieldName, gviRenderIndexRebuildType.gviRenderIndexRebuildWithData); object[] args = new object[] { featureClassInfo, editParameters.fidList }; //System.IAsyncResult asyncResult = MainFrmService.ResultSetPanel.BeginInvoke(this._deleteSelection, args); //MainFrmService.ResultSetPanel.EndInvoke(asyncResult); } } catch (System.Exception) { if (featureClass != null) { featureClass.FeatureDataSet.DataSource.StopEditing(false); } } finally { //if (featureClass != null) //{ // System.Runtime.InteropServices.Marshal.ReleaseComObject(featureClass); // featureClass = null; //} if (featureDataSet != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(featureDataSet); featureDataSet = null; } if (dataSource != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(dataSource); dataSource = null; } } }
public void DeleteLogicTree(IDataSource ds, String fdsName) { ITable t2 = null; QueryFilter filter2 = null; IFdeCursor cursor2 = null; ITable t1 = null; QueryFilter filter1 = null; IFdeCursor cursor1 = null; try { t2 = ds.OpenTable("cm_group"); filter2 = new QueryFilter(); filter2.WhereClause = String.Format("DataSet='{0}'", fdsName); cursor2 = t2.Update(filter2); cursor2.NextRow(); cursor2.DeleteRow(); if (GetQueryResults(String.Format("founder='{0}'", fdsName), "cm_logictree", ds)) { t1 = ds.OpenTable("cm_logictree"); filter1 = new QueryFilter(); filter1.WhereClause = String.Format("founder='{0}'", fdsName); cursor1 = t1.Update(filter1); cursor1.NextRow(); cursor1.DeleteRow(); } } catch (COMException comEx) { System.Diagnostics.Trace.WriteLine(comEx.Message); throw comEx; } catch (System.Exception ex) { System.Diagnostics.Trace.WriteLine(ex.Message); throw; } finally { if (filter2 != null) { //Marshal.ReleaseComObject(filter2); filter2 = null; } if (cursor2 != null) { //Marshal.ReleaseComObject(cursor2); cursor2 = null; } if (t2 != null) { //Marshal.ReleaseComObject(t2); t2 = null; } if (filter1 != null) { //Marshal.ReleaseComObject(filter1); filter1 = null; } if (cursor1 != null) { //Marshal.ReleaseComObject(cursor1); cursor1 = null; } if (t1 != null) { //Marshal.ReleaseComObject(t1); t1 = null; } } }
private void DeleteSelection(object param) { EditParameters editParameters = (EditParameters)param; if (editParameters == null) { return; } try { int count = SelectCollection.Instance().GetCount(false); int num = 0; IDataSource dataSource = ((IDataSourceFactory) new DataSourceFactoryClass()).OpenDataSourceByString(editParameters.connectionInfo); IFeatureDataSet featureDataSet = dataSource.OpenFeatureDataset(editParameters.datasetName); foreach (DF3DFeatureClass featureClassInfo in SelectCollection.Instance().FeatureClassInfoMap.Keys) { if (this._bgWorker.CancellationPending) { break; } ResultSetInfo resultSetInfo = SelectCollection.Instance().FeatureClassInfoMap[featureClassInfo] as ResultSetInfo; if (resultSetInfo != null) { string geometryFieldName = featureClassInfo.GetFeatureLayer().GeometryFieldName; IFeatureClass featureClass = featureDataSet.OpenFeatureClass(featureClassInfo.GetFeatureClass().Name); string fidFieldName = featureClass.FidFieldName; System.Collections.Generic.List <int> list = new System.Collections.Generic.List <int>(); foreach (DataRow dataRow in resultSetInfo.ResultSetTable.Rows) { int item = int.Parse(dataRow[fidFieldName].ToString()); list.Add(item); } featureClass.SetRenderIndexEnabled(geometryFieldName, false); if (featureClass.HasTemporal() && CommonUtils.Instance().EnableTemproalEdit) { TemporalFilter temporalFilter = new TemporalFilterClass(); temporalFilter.AddSubField(featureClass.FidFieldName); temporalFilter.IdsFilter = list.ToArray(); ITemporalManager temporalManager = featureClass.TemporalManager; ITemporalCursor temporalCursor = temporalManager.Search(temporalFilter); while (temporalCursor.MoveNext()) { this._manualResult.WaitOne(); System.Threading.Thread.Sleep(1); num++; string userState = string.Format(StringParser.Parse("${res:feature_progress_delete}"), num, count); int percentProgress = num * 100 / count; this._bgWorker.ReportProgress(percentProgress, userState); temporalCursor.Dead(editParameters.TemproalTime); } System.Runtime.InteropServices.Marshal.ReleaseComObject(temporalCursor); System.Runtime.InteropServices.Marshal.ReleaseComObject(temporalManager); } else { featureClass.FeatureDataSet.DataSource.StartEditing(); IFdeCursor fdeCursor = featureClass.Update(new QueryFilterClass { IdsFilter = list.ToArray() }); while (fdeCursor.NextRow() != null && !this._bgWorker.CancellationPending) { System.Threading.Thread.Sleep(1); fdeCursor.DeleteRow(); num++; string userState2 = string.Format(StringParser.Parse("${res:feature_progress_delete}"), num, count); int percentProgress2 = num * 100 / count; this._bgWorker.ReportProgress(percentProgress2, userState2); } System.Runtime.InteropServices.Marshal.ReleaseComObject(fdeCursor); featureClass.FeatureDataSet.DataSource.StopEditing(true); } if (this._progressDlg.Created) { string userState3 = StringParser.Parse("${res:feature_progress_updateindex}"); int percentProgress3 = num * 100 / count; this._bgWorker.ReportProgress(percentProgress3, userState3); } featureClass.SetRenderIndexEnabled(geometryFieldName, true); featureClass.RebuildRenderIndex(geometryFieldName, gviRenderIndexRebuildType.gviRenderIndexRebuildWithData); //System.Runtime.InteropServices.Marshal.ReleaseComObject(featureClass); } } System.Runtime.InteropServices.Marshal.ReleaseComObject(featureDataSet); System.Runtime.InteropServices.Marshal.ReleaseComObject(dataSource); //System.IAsyncResult asyncResult = MainFrmService.ResultSetPanel.BeginInvoke(this._clearSelection); //MainFrmService.ResultSetPanel.EndInvoke(asyncResult); } catch (System.Exception) { } }