예제 #1
0
        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)
            {
            }
        }
예제 #2
0
        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
                    //});
                }
            }
        }