private void AddButton_Click(object sender, RoutedEventArgs e) { CalculatedDbfColumn column = new CalculatedDbfColumn("CalculatedArea", DbfColumnType.Float, 20, 5, CalculatedDbfColumnType.Area, AreaUnit.Acres); featureLayer.Open(); switch (featureLayer.FeatureSource.GetFirstFeaturesWellKnownType()) { case WellKnownType.Invalid: case WellKnownType.GeometryCollection: case WellKnownType.Point: case WellKnownType.Multipoint: break; case WellKnownType.Line: case WellKnownType.Multiline: column = new CalculatedDbfColumn("CalculatedLength", DbfColumnType.Float, 20, 5, CalculatedDbfColumnType.Length, DistanceUnit.Meter); break; case WellKnownType.Polygon: case WellKnownType.Multipolygon: column = new CalculatedDbfColumn("CalculatedArea", DbfColumnType.Float, 20, 5, CalculatedDbfColumnType.Area, AreaUnit.Acres); break; } Collection <string> columns = new Collection <string>(); columns.Add(column.ColumnName); string alias = featureLayer.FeatureSource.GetColumnAlias(column.ColumnName); AddDbfColumnWindow window = new AddDbfColumnWindow(column, columns, DbfColumnMode.Calculated, true, alias); window.WindowStartupLocation = WindowStartupLocation.CenterOwner; window.Owner = Application.Current.MainWindow; if (window.ShowDialog().GetValueOrDefault()) { CalculatedDbfColumn newColumn = window.DbfColumn as CalculatedDbfColumn; if (newColumn != null) { if (CheckHasDuplicatedColumn(newColumn)) { return; } if (CalculatedDbfColumn.CalculatedColumns.ContainsKey(featureLayer.FeatureSource.Id)) { CalculatedDbfColumn.CalculatedColumns[featureLayer.FeatureSource.Id].Add(newColumn); } else { CalculatedDbfColumn.CalculatedColumns[featureLayer.FeatureSource.Id] = new Collection <CalculatedDbfColumn>(); CalculatedDbfColumn.CalculatedColumns[featureLayer.FeatureSource.Id].Add(newColumn); } RefreshColumnList(featureLayer); } } }
private bool CheckHasDuplicatedColumn(CalculatedDbfColumn newColumn) { Collection <ViewColumnItem> columnItems = (Collection <ViewColumnItem>)ColumnList.ItemsSource; string alias1 = featureLayer.FeatureSource.GetColumnAlias(newColumn.ColumnName); if (columnItems.Any(col => col.ColumnName == newColumn.ColumnName || col.AliasName == alias1)) { MessageBox.Show("Column Name or Alias is duplicate, please input another name.", "Info", MessageBoxButton.OK); return(true); } return(false); }
private void FillFeaturesToDataTable(Collection <Feature> features, DataTable dataTable) { if (CalculatedDbfColumn.CalculatedColumns.ContainsKey(featureLayer.FeatureSource.Id)) { CalculatedDbfColumn.UpdateCalculatedRecords(CalculatedDbfColumn.CalculatedColumns[featureLayer.FeatureSource.Id], features, GisEditor.ActiveMap.DisplayProjectionParameters); } FillUriColumnNames(uriColumnNames, dataTable); foreach (var feature in features) { DataRow newRow = dataTable.NewRow(); newRow[FeatureIdColumnName] = feature.Id; newRow[IsSelectedColumnName] = SelectedFeatures.Count > 0 && SelectedFeatures.ContainsKey(feature.Id); string tempPreviousValue = string.Empty; foreach (var item in feature.ColumnValues) { if (!string.IsNullOrEmpty(item.Key) && dataTable.Columns.Contains(item.Key)) { if (uriColumnNames.Contains(item.Key)) { newRow[item.Key] = new Uri(item.Value, UriKind.RelativeOrAbsolute); } else { newRow[item.Key] = string.IsNullOrEmpty(item.Value) ? DBNull.Value : (object)item.Value; } int previousRowCount = tempPreviousValue.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries).Count(); int currentRowCount = item.Value.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries).Count(); if (previousRowCount != currentRowCount) { EnableColumnVirtualization = false; } tempPreviousValue = item.Value; } } //foreach (var linkColumnValue in feature.LinkColumnValues) //{ // newRow[linkColumnValue.Key] = string.Join(Environment.NewLine, linkColumnValue.Value.Select(v => v.Value)); //} dataTable.Rows.Add(newRow); } }
protected override void ApplySettingsCore(StorableSettings settings) { base.ApplySettingsCore(settings); Singleton <EditorSetting> .Instance.LoadState(settings.GlobalSettings); if (settings.ProjectSettings.ContainsKey("CalculatedColumns")) { string value = settings.ProjectSettings["CalculatedColumns"]; try { XElement root = XElement.Parse(value); var featureSources = root.Elements("FeatureSource"); foreach (var featureSource in featureSources) { var id = featureSource.Attribute("ID"); Collection <CalculatedDbfColumn> columns = new Collection <CalculatedDbfColumn>(); var columnsX = featureSource.Elements("CalculatedDbfColumn"); foreach (var item in columnsX) { XmlSerializer s = new XmlSerializer(typeof(CalculatedDbfColumn)); object result = s.Deserialize(item.CreateReader()); CalculatedDbfColumn temp = result as CalculatedDbfColumn; if (temp != null) { columns.Add(temp); } } if (columns.Count > 0) { CalculatedColumns[id.Value] = columns; } } } catch { } } }
private void RefreshColumnList(FeatureLayer featureLayer) { Collection <ViewColumnItem> viewColumnItems = new Collection <ViewColumnItem>(); featureLayer.SafeProcess(() => { foreach (var column in featureLayer.FeatureSource.GetColumns()) { if (!string.IsNullOrEmpty(column.ColumnName)) { string alias = featureLayer.FeatureSource.GetColumnAlias(column.ColumnName); ViewColumnItem item = new ViewColumnItem(column, alias); viewColumnItems.Add(item); } } }); if (CalculatedDbfColumn.CalculatedColumns.ContainsKey(featureLayer.FeatureSource.Id)) { foreach (var column in CalculatedDbfColumn.CalculatedColumns[featureLayer.FeatureSource.Id]) { string alias = featureLayer.FeatureSource.GetColumnAlias(column.ColumnName); ViewColumnItem item = new ViewColumnItem(column, alias, true); item.EditAction = c => { DbfColumn dbfColumn = (DbfColumn)c; Collection <string> columns = new Collection <string>(); columns.Add(c.ColumnName); string tempAlias = featureLayer.FeatureSource.GetColumnAlias(dbfColumn.ColumnName); AddDbfColumnWindow window = new AddDbfColumnWindow(dbfColumn, columns, DbfColumnMode.Calculated, true, tempAlias); window.WindowStartupLocation = WindowStartupLocation.CenterOwner; window.Owner = Application.Current.MainWindow; if (window.ShowDialog().GetValueOrDefault()) { CalculatedDbfColumn newColumn = window.DbfColumn as CalculatedDbfColumn; if (newColumn != null) { //Check does edit CalculatedDbfColumn tempColumn = (CalculatedDbfColumn)c; if (newColumn.ColumnName == tempColumn.ColumnName && newColumn.CalculationType == tempColumn.CalculationType && newColumn.ColumnType == tempColumn.ColumnType && newColumn.DecimalLength == tempColumn.DecimalLength && newColumn.Length == tempColumn.Length && newColumn.LengthUnit == tempColumn.LengthUnit && newColumn.MaxLength == tempColumn.MaxLength && newColumn.AreaUnit == tempColumn.AreaUnit && newColumn.TypeName == tempColumn.TypeName) { return; } if (CheckHasDuplicatedColumn(newColumn)) { return; } if (CalculatedDbfColumn.CalculatedColumns.ContainsKey(featureLayer.FeatureSource.Id)) { CalculatedDbfColumn calColumn = (CalculatedDbfColumn)c; if (CalculatedDbfColumn.CalculatedColumns[featureLayer.FeatureSource.Id].Contains(calColumn)) { CalculatedDbfColumn.CalculatedColumns[featureLayer.FeatureSource.Id].Remove(calColumn); } CalculatedDbfColumn.CalculatedColumns[featureLayer.FeatureSource.Id].Add(newColumn); } RefreshColumnList(featureLayer); } } }; item.DeleteAction = c => { if (CalculatedDbfColumn.CalculatedColumns.ContainsKey(featureLayer.FeatureSource.Id)) { CalculatedDbfColumn calColumn = (CalculatedDbfColumn)c; if (CalculatedDbfColumn.CalculatedColumns[featureLayer.FeatureSource.Id].Contains(calColumn)) { CalculatedDbfColumn.CalculatedColumns[featureLayer.FeatureSource.Id].Remove(calColumn); RefreshColumnList(featureLayer); } } }; viewColumnItems.Add(item); } } ColumnList.ItemsSource = viewColumnItems; }