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) { } }
private void InsertSelection(IObjectClass oc, IRowBufferCollection rows) { //FeatureClassInfo featureClassInfo = WorkSpaceServices.Instance().GetFeatureClassInfo(oc.Name, true); DF3DFeatureClass featureClassInfo = DF3DFeatureClassManager.Instance.GetFeatureClassByID(oc.GuidString); if (featureClassInfo == null) { return; } if (oc.Type == gviDataSetType.gviDataSetFeatureClassTable) { lock (SelectCollection.Instance().FeatureClassInfoMap) { ResultSetInfo resultSetInfo = SelectCollection.Instance().FeatureClassInfoMap[featureClassInfo] as ResultSetInfo; if (resultSetInfo == null) { object[] args = new object[] { oc, //featureClassInfo.GeometryFieldName featureClassInfo.GetFeatureLayer().GeometryFieldName }; //DataTable dt = MainFrmService.MainFrm.Invoke(this._CreaDataTable, args) as DataTable; //resultSetInfo = new ResultSetInfo(dt, SelectCollection.Instance().GetOIDList(rows)); //resultSetInfo.TotalCount = 0; //SelectCollection.Instance().FeatureClassInfoMap[featureClassInfo] = resultSetInfo; //MainFrmService.MainFrm.Invoke(this._notifySelection); } //DataTable resultSetTable = resultSetInfo.ResultSetTable; //for (int i = 0; i < rows.Count; i++) //{ // this._nCurIndex++; // string userState = string.Format(StringParser.Parse("${res:feature_progress_finished}"), this._nCurIndex, this._nTotalCount); // int percentProgress = this._nCurIndex * 100 / this._nTotalCount; // this._bgWorker.ReportProgress(percentProgress, userState); // object[] args2 = new object[] // { // oc, // resultSetTable, // rows.Get(i) // }; // int num = -1; // int.TryParse(MainFrmService.MainFrm.Invoke(this._InsertRecord, args2).ToString(), out num); // if (resultSetInfo.OidList == null) // { // resultSetInfo.OidList = new System.Collections.Generic.List<int>(); // } // if (num != -1 && !resultSetInfo.OidList.Contains(num)) // { // resultSetInfo.OidList.Add(num); // } //} //if (resultSetInfo.OidList.Count<int>() > 0) //{ // RenderControlServices.Instance().AxRenderControl.FeatureManager.HighlightFeatures(oc as IFeatureClass, resultSetInfo.OidList.ToArray(), 4294901860u); //} //resultSetInfo.TotalCount += rows.Count; //object[] args3 = new object[] //{ // featureClassInfo.FeatureLayerGuidString, // resultSetInfo.TotalCount, // resultSetInfo.ResultSetTable.Rows.Count //}; //MainFrmService.MainFrm.Invoke(this._recordsChanged, args3); //HashMap hashMap = MainFrmService.MainFrm.Invoke(this._GetRowbufferMap) as HashMap; //MainFrmService.MainFrm.Invoke(this._setEditorPositionHandel, new object[] //{ // hashMap //}); } } }