年度变更建库软件5.0版本
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1065 lines
53 KiB

using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.Geodatabase;
using KGIS.Framework.DBOperator;
using KGIS.Framework.Maps;
using KGIS.Framework.Platform;
using KGIS.Framework.Utils;
using KGIS.Framework.Utils.ExtensionMethod;
using KGIS.Framework.Utils.Helper;
using KGIS.Framework.Utils.Interface;
using KGIS.Framework.Views;
using Kingo.Plugin.MapView.Enum;
using Kingo.Plugin.MapView.Model;
using Kingo.PluginServiceInterface;
using Kingo.PluginServiceInterface.Model;
using KUI.ComboBox;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
namespace Kingo.Plugin.MapView.Views.FeatureAttribute
{
/// <summary>
/// UCAttributeEdit.xaml 的交互逻辑
/// </summary>
public partial class UCAttributeEdit : UserControl, IElementInfo
{
LayerFieldCfg Cfg = null;
EngineEditor editor = null;
List<DataDicTionary> Dics = null;
public Linkage[] LinkageCfg { get; set; }
private object Data = null;
private List<PropertyGridDataStruct> Property = null;
public UCAttributeEdit()
{
InitializeComponent();
this.DockAreas = DockStyle.DockRight | DockStyle.Float;//Common.Interface.DockStyle.DockRight | Common.Interface.DockStyle.Float;
this.FloatSize = new System.Drawing.Size(400, 500);
this.DefaultArea = DockStyle.Float;// Common.Interface.DockStyle.DockRight;
this.ShowCloseButton = false;
this.ShowAutoHideButton = true;
this.Title = "要素属性";
editor = new EngineEditorClass();
Property = new List<PropertyGridDataStruct>();
string cfgFilePath = System.IO.Path.Combine(SysAppPath.GetConfigPath(), "LayerFieldsCfg.xml");
Cfg = SerializeAPI.DeserializeToObject2<LayerFieldCfg>(cfgFilePath);
this.Loaded += (s, e) =>
{
//关闭编辑禁用属性编辑
bool IsOnlySave = false;
editor = new EngineEditorClass();
editor.OnStopEditing += (b) =>
{
if (!IsOnlySave && Data != null)
{
if (Data is IFeature)
MapsManager.Instance.MapService.SelectFeature(((Data as IFeature).Class as FeatureClass).Name, (Data as IFeature).OID.ToString());
AllowEdit = false;
RefreshView();
}
IsOnlySave = false;
Dics = null;
};
editor.OnSaveEdits += () =>
{
IsOnlySave = true;
};
editor.OnStartEditing += () =>
{
if (Data != null)
{
AllowEdit = true;
RefreshView();
Dics = null;
}
};
};
}
#region 继承字段
public bool IsShow { get; set; }
public int ShowIndex { get; set; }
public bool ResetSize { get; set; }
public bool AllowEdit { get; set; }
public Guid ID { get; set; }
public DockStyle DockAreas { get; set; }
public System.Drawing.Size FloatSize { get; set; }
public int DockWidth { get; set; }
public int DockHeight { get; set; }
public DockStyle DefaultArea { get; set; }
public bool ShowCloseButton { get; set; }
public bool ShowAutoHideButton { get; set; }
public string Title { get; set; }
#endregion
public void BindData(object obj)
{
try
{
if (obj is IFeature) Data = obj;
Property.Clear();
if (obj == null)
{
grid.Children.Clear();
grid.RowDefinitions.Clear();
return;
};
//AllowEdit = !(editor.EditState == esriEngineEditState.esriEngineStateNotEditing || (editor.EditWorkspace != null && editor.EditWorkspace.PathName != ((obj as IFeature).Class as FeatureClass).Workspace.PathName));
if (Dics == null && Platform.Instance.SystemType != SystemTypeEnum.DTBJK && Platform.Instance.SystemType != SystemTypeEnum.WYZS && Platform.Instance.SystemType != SystemTypeEnum.YCLJK)
Dics = Platform.Instance.DicHelper.GetAllDic();
else if (Platform.Instance.SystemType == SystemTypeEnum.DTBJK || Platform.Instance.SystemType == SystemTypeEnum.WYZS || Platform.Instance.SystemType == SystemTypeEnum.YCLJK)
Dics = GetAllDic();
if (obj is IFeature)
{
AllowEdit = !(editor.EditState == esriEngineEditState.esriEngineStateNotEditing || (editor.EditWorkspace != null && editor.EditWorkspace.PathName != ((obj as IFeature).Class as FeatureClass).Workspace.PathName));
IFeature fe = obj as IFeature;
LayerInfo layer = Cfg.Layers[0];
for (int i = 0; i < fe.Fields.FieldCount; i++)
{
IField field = fe.Fields.get_Field(i);
if (field.Name.ToUpper() == "SHAPE" || field.Name.ToUpper().Contains("_EXTRA") || field.Name == "ErrorMessage" || field.Name == "ErrorShape")
continue;
List<FieldCfg> fields = layer.GetAllField();
FieldCfg fCfg = fields.FirstOrDefault(f => f.Name == field.Name);
IDomain domain = field.Domain;
PropertyGridDataStruct p = new PropertyGridDataStruct();
p.DisplayMemberPath = "DisplayName";
p.ValuePath = "CODE";
if (!field.Editable)
{
p.IsReadOnly = !field.Editable;
}
else
{
p.IsReadOnly = editor.EditState == esriEngineEditState.esriEngineStateNotEditing || (editor.EditWorkspace != null && editor.EditWorkspace.PathName != (fe.Class as FeatureClass).Workspace.PathName);
}
//是否可以为空
p.AllowNull = field.IsNullable;
if (string.IsNullOrWhiteSpace(field.AliasName))
{
p.Key = field.Name;
}
else
{
p.Key = field.AliasName;
}
p.FieldName = field.Name;
if (fCfg != null && !string.IsNullOrWhiteSpace(fCfg.DicName))
{
p.PropertyType = enumPropertyType.ComboBox;
if (LinkageCfg != null)
{
foreach (var item in LinkageCfg)
{
if (field.Name == item.TargetPropertyName || field.Name == item.SourcePropertyName)
{
p.IsGroup = item.IsGroup;
break;
}
}
Linkage cfg = LinkageCfg.FirstOrDefault(w => w.SourcePropertyName == field.Name && w.LinkageType == EnumLinkageType.None && (!string.IsNullOrWhiteSpace(w.DisplayMemberPath) || !string.IsNullOrWhiteSpace(w.ValuePath)));
if (cfg != null)
{
p.DisplayMemberPath = cfg.DisplayMemberPath;
p.ValuePath = cfg.ValuePath;
}
}
p.DicData = new List<DataDicTionary>();//单图斑建库系统不需要字典设置
DicTypeEnum dicType = (DicTypeEnum)System.Enum.Parse(typeof(DicTypeEnum), fCfg.DicName);
if (Platform.Instance.SystemType != SystemTypeEnum.DTBJK && Platform.Instance.SystemType != SystemTypeEnum.YCLJK)
{
if (p.Key == "权属单位代码" || p.Key == "坐落单位代码")
{
p.DicData.Add(new DataDicTionary() { NAME = " ", CODE = " ", DisplayName = " - ", ID = 1 });
p.DicData.AddRange(Platform.Instance.DicHelper.GetNoGroupDic(dicType, Dics).Where(x => (x.OWNERDIC == "1" || Convert.ToInt32(x.OWNERDIC) >= 50) && x.CODE.Length >= 19).ToLookup(x => x.CODE).ToDictionary(x => x.Key, x => x.First()).Values.ToList());
}
else
p.DicData = Platform.Instance.DicHelper.GetNoGroupDic(dicType, Dics);
}
else
{
p.DicData = GetNoGroupDic(dicType, Dics);
}
}
else
{
p.PropertyType = enumPropertyType.TextBox;
}
//单图斑变更增加逻辑
if (p.Key == "DDTCMC" || p.Key == "单独图层名称")
{
p.DicData = new List<DataDicTionary>();
//p.DicData.Add(new DataDicTionary() { NAME = " ", CODE = " ", DisplayName = " - ", ID = 1 });
p.DicData.Add(new DataDicTionary() { NAME = "一般地类", CODE = "一般地类", DisplayName = "一般地类-一般地类", ID = 2 });
p.DicData.Add(new DataDicTionary() { NAME = "已灭失", CODE = "已灭失", DisplayName = "已灭失-已灭失", ID = 3 });
p.DicData.Add(new DataDicTionary() { NAME = "光伏板区", CODE = "1302", DisplayName = "1302-光伏板区", ID = 4 });
p.DicData.Add(new DataDicTionary() { NAME = "推土区", CODE = "1303", DisplayName = "1303-推土区", ID = 5 });
p.DicData.Add(new DataDicTionary() { NAME = "拆除未尽区", CODE = "1304", DisplayName = "1304-拆除未尽区", ID = 6 });
p.DicData.Add(new DataDicTionary() { NAME = "路面范围", CODE = "1305", DisplayName = "1305-路面范围", ID = 7 });
p.DicData.Add(new DataDicTionary() { NAME = "工厂化种植更新", CODE = "1306", DisplayName = "1306-工厂化种植更新", ID = 8 });
p.PropertyType = enumPropertyType.ComboBox;
}
else if (p.Key == "SFXML" || p.Key == "变更类型")
{
p.DicData = new List<DataDicTionary>();
p.DicData.Add(new DataDicTionary() { NAME = "否", CODE = "0", DisplayName = "0-否", ID = 2 });
p.DicData.Add(new DataDicTionary() { NAME = "是", CODE = "1", DisplayName = "1-是", ID = 3 });
p.PropertyType = enumPropertyType.ComboBox;
}
else if (p.Key == "XMLX" || p.Key == "项目类型")
{
p.DicData = new List<DataDicTionary>();
p.DicData.Add(new DataDicTionary() { NAME = "土地开发项目", CODE = "1", DisplayName = "1-土地开发项目", ID = 2 });
p.DicData.Add(new DataDicTionary() { NAME = "增减挂钩项目", CODE = "2", DisplayName = "2-增减挂钩项目", ID = 3 });
p.DicData.Add(new DataDicTionary() { NAME = "生态修复项目", CODE = "3", DisplayName = "3-生态修复项目", ID = 4 });
p.DicData.Add(new DataDicTionary() { NAME = "高标准农田建设项目", CODE = "4", DisplayName = "4-高标准农田建设项目", ID = 5 });
p.DicData.Add(new DataDicTionary() { NAME = "恢复耕地项目", CODE = "5", DisplayName = "5-恢复耕地项目", ID = 6 });
p.DicData.Add(new DataDicTionary() { NAME = "其他项目", CODE = "6", DisplayName = "6-其他项目", ID = 7 });
p.PropertyType = enumPropertyType.ComboBox;
}
else if (p.Key == "TBMJ" || p.Key == "图斑面积")
{
p.IsReadOnly = true;
}
if (fe.get_Value(i) is DBNull || fe.get_Value(i) == null)
{
p.Value = null;
}
else
{
p.Value = fe.get_Value(i).ToString().Trim();
}
p.PropertyChanged += PropertyChangedEvent;
if ((fe.Class as FeatureClass).Name == "JCTB")
p.Visible = AllowEdit;//当前对监测图斑单独显示
Property.Add(p);
}
RefreshView();
this.DataContext = Property;
ExecuteDataCheck(fe);
//lbTBList.ItemsSource = null;
//lbTBList.ItemsSource = Property;
}
}
catch (Exception ex)
{
LogAPI.Debug("图斑变更属性编辑失败:" + ex.Message);
throw ex;
}
}
private void RefreshView()
{
SetVisible(Property);
#region
grid.Children.Clear();
grid.RowDefinitions.Clear();
Property = Property.OrderBy(o => o.Order).ToList();
foreach (var item in Property)
{
if (item.Visible)
{
grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(37, GridUnitType.Pixel) });
Label lab = new Label();
lab.Content = item.Key;
lab.SetValue(Grid.RowProperty, grid.RowDefinitions.Count - 1);
lab.HorizontalContentAlignment = HorizontalAlignment.Right;
lab.Margin = new Thickness(4);
lab.IsEnabled = !item.IsReadOnly;
grid.Children.Add(lab);
Control ctrl = new TextBox();
ctrl.Height = 27;
Binding bind = new Binding();
bind.Path = new PropertyPath("Value");
bind.Mode = BindingMode.TwoWay;
switch (item.PropertyType)
{
case enumPropertyType.Default:
case enumPropertyType.TextBox:
ctrl = new TextBox();
ctrl.Height = 27;
ctrl.DataContext = item;
bind.UpdateSourceTrigger = UpdateSourceTrigger.LostFocus;
ctrl.SetBinding(TextBox.TextProperty, bind);
ctrl.IsEnabled = !item.IsReadOnly;
break;
case enumPropertyType.CheckBox:
ctrl = new CheckBox();
ctrl.DataContext = item;
ctrl.SetBinding(CheckBox.IsCheckedProperty, bind);
ctrl.IsEnabled = AllowEdit;
break;
case enumPropertyType.DatePicker:
ctrl = new DatePicker();
ctrl.DataContext = item;
ctrl.SetBinding(DatePicker.TextProperty, bind);
ctrl.IsEnabled = AllowEdit;
break;
case enumPropertyType.SpinEdit:
break;
case enumPropertyType.ButtonEdit:
break;
case enumPropertyType.ButtonEditFJ:
break;
case enumPropertyType.ComboBox:
case enumPropertyType.AutoCompleteBox:
ctrl = new AutoCompleteBox();
ctrl.Height = 27;
ctrl.DataContext = item;
ctrl.LostFocus += UCAttributeLostFocus;
bind.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
ctrl.SetValue(AutoCompleteBox.ItemsSourceProperty, item.DicData);
ctrl.SetValue(AutoCompleteBox.ValueMemberPathProperty, item.ValuePath);
ctrl.SetValue(AutoCompleteBox.DisplayMemberPathProperty, item.DisplayMemberPath);
ctrl.SetBinding(AutoCompleteBox.SelectedValueProperty, bind);
ctrl.IsEnabled = AllowEdit;
(ctrl as AutoCompleteBox).IsEditable = AllowEdit;
break;
default:
break;
}
ctrl.SetValue(Grid.RowProperty, grid.RowDefinitions.Count - 1);
ctrl.SetValue(Grid.ColumnProperty, 1);
ctrl.HorizontalAlignment = HorizontalAlignment.Stretch;
ctrl.Margin = new Thickness(2);
grid.Children.Add(ctrl);
}
}
grid.RowDefinitions.Add(new RowDefinition());
#endregion
}
/// <summary>
/// AttributeEdit_LostFous
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void UCAttributeLostFocus(object sender, RoutedEventArgs e)
{
try
{
string senderText = (sender as AutoCompleteBox).Text.Trim();
if (!(sender as AutoCompleteBox).SelectedValue.ToString().Trim().Equals(senderText) && string.IsNullOrWhiteSpace(senderText))
{
(sender as AutoCompleteBox).SelectedValue = ((e.Source as AutoCompleteBox).ItemsSource as List<DataDicTionary>)[0];
}
}
catch (Exception ex)
{
LogAPI.Debug(ex.Message);
}
}
private void SetVisible(List<PropertyGridDataStruct> pList)
{
string cfgFilePath = System.IO.Path.Combine(SysAppPath.GetConfigPath(), "LayerFieldsCfg.xml");
if (Cfg == null)
Cfg = SerializeAPI.DeserializeToObject2<LayerFieldCfg>(cfgFilePath);
if (Cfg == null || Cfg.Layers.Count == 0) return;
LayerInfo layer = Cfg.Layers[0];
if ((Data is IFeature) && ((Data as IFeature).Class as FeatureClass).Name == "DLTBGX")
layer.Fields.ForEach(x => x.DisplayWhere = "");//增量更新变更展示全部可修改数据
string dlbm = string.Empty;
string ddtbbz = string.Empty;
string sfxml = string.Empty;
string zzsx = string.Empty;
string czcsxm = string.Empty;
PropertyGridDataStruct propertySet = pList.FirstOrDefault(x => x.FieldName.ToUpper().Equals("DDTCBZ"));
if (propertySet != null)
{
ddtbbz = propertySet.Value;
}
propertySet = pList.FirstOrDefault(x => x.FieldName.ToUpper().Equals("DLBM"));
if (propertySet != null)
{
dlbm = propertySet.Value == null ? "" : propertySet.Value;
}
//propertySet = pList.FirstOrDefault(x => x.FieldName.Equals("SFXML"));
propertySet = pList.FirstOrDefault(x => x.Key.Equals("变更类型"));
if (propertySet != null)
{
sfxml = propertySet.Value == null ? "" : propertySet.Value;
}
foreach (var item in layer.Fields)
{
string val = string.Empty;
int idx = -1;
//List<DataDicTionary> TempDic = null;
var GroupField = pList.FirstOrDefault(f => f.Key == item.Name || f.Key == item.AliasName);
if (GroupField == null)
{
GroupField = new PropertyGridDataStruct();
GroupField.PropertyType = enumPropertyType.ComboBox;
GroupField.PropertyChanged += PropertyChangedEvent;
}
GroupField.Order = layer.Fields.IndexOf(item);
GroupField.Key = item.AliasName;
foreach (var subItem in item.Fields)
{
var field = pList.FirstOrDefault(f => f.Key == subItem.Name || f.Key == subItem.AliasName);
if (field == null) return;
if (!string.IsNullOrWhiteSpace(field.Value))
{
if (!string.IsNullOrWhiteSpace(val.ToTrim()))
val += "-";
val += field.Value;
}
if (GroupField.PropertyType == field.PropertyType)
{
if (GroupField.Value.ToTrim() != field.Value.ToTrim() && !GroupField.Value.ToTrim().Contains(field.Value.ToTrim()))
GroupField.Value = field.Value;
GroupField.DicData = field.DicData;
GroupField.ValuePath = field.DisplayMemberPath;
GroupField.DisplayMemberPath = field.DisplayMemberPath;
}
if (!string.IsNullOrWhiteSpace(subItem.DisplayWhere.ToTrim()))
{
//字段显示条件
string[] wheres = subItem.DisplayWhere.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < wheres.Length; i++)
{
string[] kv = wheres[i].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
if (kv.Length != 2)
{
LogAPI.Debug(string.Format("图层字段配置错误,FieldCfg中Name={0}", subItem.Name));
continue;
}
var tempField = pList.FirstOrDefault(f => f.Key == kv[0] || f.FieldName == kv[0]);
if (tempField != null)
{
if (kv[1].ToTrim().Contains("%"))
subItem.Display = tempField.Value.ToTrim().StartsWith(kv[1].ToTrim().Replace("%", ""));
else
subItem.Display = tempField.Value.ToTrim() == kv[1].ToTrim();
}
}
}
field.Visible = subItem.Display;
if (field.Visible)
{
item.Display = false;
}
if (idx == -1)
{
idx = pList.IndexOf(field);
}
}
if (!string.IsNullOrWhiteSpace(item.DisplayWhere.ToTrim()))
{
//字段显示条件
string[] wheres = item.DisplayWhere.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < wheres.Length; i++)
{
string[] kv = wheres[i].Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries);
if (kv.Length != 2)
{
LogAPI.Debug(string.Format("图层字段配置错误,FieldCfg中Name={0}", item.Name));
continue;
}
if (kv[1].Contains("|"))//当前为测试项逻辑
{
string[] kv2 = kv[1].Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
var tempField = pList.FirstOrDefault(f => f.Key == kv[0] || f.FieldName == kv[0]);
if (tempField != null)
{
if (kv2[0].ToTrim().Contains("%") && kv2[1].ToTrim().Contains("%"))
item.Display = tempField.Value.ToTrim().StartsWith(kv2[0].ToTrim().Replace("%", "")) || tempField.Value.ToTrim().StartsWith(kv2[1].ToTrim().Replace("%", ""));
else if (kv2[0].ToTrim().Contains("%"))
item.Display = tempField.Value.ToTrim().StartsWith(kv2[0].ToTrim().Replace("%", "")) || tempField.Value.ToTrim().Equals(kv2[1]);
else
item.Display = tempField.Value.ToTrim() == kv2[1].ToTrim() || tempField.Value.ToTrim() == kv2[0].ToTrim();
GroupField.Visible = item.Display;
}
}
else
{
var tempField = pList.FirstOrDefault(f => f.Key == kv[0] || f.FieldName == kv[0]);
if (tempField != null)
{
if (kv[1].ToTrim().Contains("%"))
item.Display = tempField.Value.ToTrim().StartsWith(kv[1].ToTrim().Replace("%", ""));
else
item.Display = tempField.Value.ToTrim() == kv[1].ToTrim();
GroupField.Visible = item.Display;
}
}
}
}
if (item.Display)
{
if (idx == -1) idx = 0;
var field = pList.FirstOrDefault(f => f.Key == item.Name || f.Key == item.AliasName);
if (field == null)
{
GroupField.Value = val;
GroupField.Visible = item.Display;
pList.Insert(idx, GroupField);
}
GroupField.Visible = item.Display;
}
//单图斑展示字段间逻辑
if (item.AliasName.Trim() == "地类信息" && !string.IsNullOrWhiteSpace(ddtbbz))
{
DataDicTionary dataDicTionary = GroupField.DicData.FirstOrDefault(x => string.IsNullOrWhiteSpace(x.CODE));
if (dataDicTionary != null)
{
GroupField.DicData.Remove(dataDicTionary);
}
GroupField.Visible = true;
List<DataDicTionary> dataDicTionaries = new List<DataDicTionary>();
switch (ddtbbz)
{
case "1301"://临时用地
string values = "05H1,0508,0601,0602,0603,0701,0702,08H1,08H2,08H2A,0809,0810,0810A,09,1001A,1002A,1003A,1004,1005,1007,1008,1009,1109,8801";
foreach (string code in values.Split(','))
{
dataDicTionary = GroupField.DicData.FirstOrDefault(x => x.CODE.Equals(code));
if (dataDicTionary != null)
{
dataDicTionaries.Add(dataDicTionary);
}
}
break;
case "1302"://光伏板区
values = "0101,0102,0103,0204,0307,0401,0403,0404,0404A,0601,1101,1102,1103,1104,1104A,1105,1106,1107,1204,1205,1206,1207,8801,9901";
foreach (string code in values.Split(','))
{
dataDicTionary = GroupField.DicData.FirstOrDefault(x => x.CODE.Equals(code));
if (dataDicTionary != null)
{
dataDicTionaries.Add(dataDicTionary);
}
}
break;
case "1303"://推土区
values = "8801,05H1,0508,0601,0602,0603,0701,0702,08H1,08H2,08H2A,0809,0810,0810A,09,1001";
foreach (string code in values.Split(','))
{
dataDicTionary = GroupField.DicData.FirstOrDefault(x => x.CODE.Equals(code));
if (dataDicTionary != null)
{
dataDicTionaries.Add(dataDicTionary);
}
}
break;
case "1304"://拆除未尽区
values = "05H1,0508,0601,0602,0603,0701,0702,08H1,08H2,08H2A,0809,0810,0810A,09,1001,1001A,1002,1002A,1003,1003A,1004,1005,1007,1008,1009,1109,1202,8801";
foreach (string code in values.Split(','))
{
dataDicTionary = GroupField.DicData.FirstOrDefault(x => x.CODE.Equals(code));
if (dataDicTionary != null)
{
dataDicTionaries.Add(dataDicTionary);
}
}
break;
case "1305"://路面范围
values = "1001,1003,8801";
if (SysConfigsOprator.GetAppsetingValueByKey("ArearName").Equals("43"))
{
values = "1003,8801";
}
foreach (string code in values.Split(','))
{
dataDicTionary = GroupField.DicData.FirstOrDefault(x => x.CODE.Equals(code));
if (dataDicTionary != null)
{
dataDicTionaries.Add(dataDicTionary);
}
}
break;
case "1306"://工厂化种植更新(待更新相关地类)
break;
case "1307"://荒草地特征图斑(基础库地类建设用地或设施农用地)
dataDicTionary = GroupField.DicData.FirstOrDefault(x => x.CODE.Equals("8801"));
if (dataDicTionary != null)
{
dataDicTionaries.Add(dataDicTionary);
}
break;
default://一般地类不展示1001和1003地类
DataDicTionary[] dataDics = new DataDicTionary[GroupField.DicData.Count];
GroupField.DicData.CopyTo(dataDics);
dataDicTionaries = dataDics.ToList();
values = "1001,1003,8801";
if (SysConfigsOprator.GetAppsetingValueByKey("ArearName").Equals("43"))
{
values = "1003,8801";
}
foreach (string code in values.Split(','))
{
dataDicTionary = dataDicTionaries.FirstOrDefault(x => x.CODE.Equals(code));
if (dataDicTionary != null)
{
dataDicTionaries.Remove(dataDicTionary);
}
}
break;
}
GroupField.DicData = dataDicTionaries;
}
else if (item.AliasName.Equals("城镇村属性码") && !string.IsNullOrWhiteSpace(dlbm))
{
if (dlbm.Equals("9904") || dlbm.Equals("9905"))
{
GroupField.Value = string.Empty;
GroupField.Visible = false;
continue;
}
List<DataDicTionary> dataDicTionaries = new List<DataDicTionary>();
List<string> listValue = new List<string>();
//添加该字典的空选项
dataDicTionaries.Add(GroupField.DicData[0]);
if ("05H1/0508/0701/0702/08H1/08H2/08H2A/0809/0810/0810A/1005/1201/1004".Split('/').Contains(dlbm))
{
listValue = "201,202,203".Split(',').ToList();
}
else if (dlbm.Equals("0601"))
{
listValue = "201,202,203,201A,202A,203A".Split(',').ToList();
}
else if (dlbm.Equals("0602") || dlbm.Equals("0603"))
{
listValue = "201,202,203,204".Split(',').ToList();
}
else if (dlbm.Equals("09"))
{
listValue = "201,202,203,205".Split(',').ToList();
}
else
{
dataDicTionaries = GroupField.DicData;
}
foreach (string code in listValue)
{
DataDicTionary dataDicTionary = GroupField.DicData.FirstOrDefault(x => x.CODE.Equals(code));
if (dataDicTionary != null)
{
dataDicTionaries.Add(dataDicTionary);
}
}
GroupField.DicData = dataDicTionaries;
if (dataDicTionaries.FirstOrDefault(x => x.CODE.Equals(GroupField.Value)) == null)
{
GroupField.Value = string.Empty;
}
}
else if (item.AliasName.Equals("种植属性") && !string.IsNullOrWhiteSpace(dlbm))
{
List<string> listValue = new List<string>();
string lstDLBM = "0101/0102/0103/0201/0202/0203/0204/0201K/0202K/0203K/0204K/0301/0302/0305/0307/0301K/0302K/0307K/0403K/1104K/0404A/1104/1104A/0404";
if (!lstDLBM.Split('/').Contains(dlbm))
{
GroupField.Value = string.Empty;
GroupField.Visible = false;
}
else
{
List<DataDicTionary> dataDicTionaries = new List<DataDicTionary>();
//添加该字典的空选项
dataDicTionaries.Add(GroupField.DicData[0]);
if (dlbm.StartsWith("01"))
{
listValue = "WG,LS,FLS,LYFL,LLJZ".Split(',').ToList();
}
else if ("0201/0202/0203/0204/0301/0302/0305/0307/1104/1104A/0404".Split('/').Contains(dlbm))
{
listValue = "JKHF,GCHF".Split(',').ToList();
}
else if ("0201K/0202K/0203K/0204K/0301K/0302K/0307K/0403K/1104K".Split('/').Contains(dlbm))
{
dataDicTionaries.Clear();
listValue = "JKHF,GCHF".Split(',').ToList();
}
else if (dlbm.Equals("0404A"))
{
listValue = "GCHF".Split(',').ToList();
}
else
{
dataDicTionaries = GroupField.DicData;
}
foreach (string code in listValue)
{
DataDicTionary dataDicTionary = GroupField.DicData.FirstOrDefault(x => x.CODE.Equals(code));
if (dataDicTionary != null)
{
dataDicTionaries.Add(dataDicTionary);
}
}
GroupField.DicData = dataDicTionaries;
if (dataDicTionaries.FirstOrDefault(x => x.CODE.Equals(GroupField.Value)) == null)
{
GroupField.Value = string.Empty;
}
}
}
else if (item.AliasName.Equals("图斑细化") && !string.IsNullOrWhiteSpace(dlbm))
{
List<string> listValue = new List<string>();
string lstDLBM = "0101/0102/0103/0201/0202/0203/0204/0201K/0202K/0203K/0204K/0301/0302/0305/0307/0404/0404A/0601/0602/1001/1003";
if (!lstDLBM.Split('/').Contains(dlbm))
{
GroupField.Value = string.Empty;
GroupField.Visible = false;
}
else
{
List<DataDicTionary> dataDicTionaries = new List<DataDicTionary>();
//添加该字典的空选项
dataDicTionaries.Add(GroupField.DicData[0]);
if (dlbm.StartsWith("01"))
{
listValue = "HDGD,HQGD,LQGD,MQGD,SHGD,SMGD,YJGD".Split(',').ToList();
}
else if (dlbm.StartsWith("02"))
{
listValue = new List<string>() { "LQYD" };
}
else if (dlbm.StartsWith("03") || dlbm.Equals("0404A"))
{
listValue = new List<string>() { "LJTM" };
}
else if (dlbm.Equals("0404"))
{
listValue = new List<string>() { "LJTM", "GCCD" };
}
else if (dlbm.Equals("0601"))
{
listValue = "HDGY,GTGY,MTGY,SNGY,BLGY,DLGY".Split(',').ToList();
}
else if (dlbm.Equals("0602") || dlbm.Equals("1001") || dlbm.Equals("1003"))
{
listValue = new List<string>() { "FQ" };
}
else
{
dataDicTionaries = GroupField.DicData;
}
foreach (string code in listValue)
{
DataDicTionary dataDicTionary = GroupField.DicData.FirstOrDefault(x => x.CODE.Equals(code));
if (dataDicTionary != null)
{
dataDicTionaries.Add(dataDicTionary);
}
}
GroupField.DicData = dataDicTionaries;
if (dataDicTionaries.FirstOrDefault(x => x.CODE.Equals(GroupField.Value)) == null)
{
//GroupField.Value = string.Empty;
}
}
}
else if (item.AliasName.Equals("项目类型") || item.AliasName.Equals("项目名称") || item.AliasName.Equals("项目编号") || item.AliasName.Equals("地块名称"))
{
if (sfxml.Equals("1"))
{
GroupField.Visible = true;
}
else
{
GroupField.Visible = false;
GroupField.Value = string.Empty;
}
}
}
}
void PropertyChangedEvent(object sender, PropertyChangedEventArgs e)
{
try
{
//if (MyPropertyGrid.ItemsSource == null)
// return;
PropertyGridDataStruct property = (PropertyGridDataStruct)sender;
if (property != null)
{
if (!property.Visible) return;
if (Data is IFeature)
{
int index = (Data as IFeature).Fields.FindField(property.Key);
if (index == -1)
index = (Data as IFeature).Fields.FindFieldByAliasName(property.Key);
if (index != -1)
{
SetFeatureValue(property);
}
else
{
//Property.FirstOrDefault(f=>f.Key== property.Key)
if (Cfg == null) return;
if (Cfg.Layers.Count == 0) return;
LayerInfo layer = Cfg.Layers[0];
var fieldItem = layer.Fields.FirstOrDefault(f => f.Name == property.Key || f.AliasName == property.Key);
if (property.Value == "-") { property.Value = " - "; }//地类信息处理
string[] values = property.Value.Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries);
if (values.Length != fieldItem.Fields.Count) return;
for (int i = 0; i < fieldItem.Fields.Count; i++)
{
var hidItem = Property.FirstOrDefault(f => f.Key == fieldItem.Fields[i].Name || f.Key == fieldItem.Fields[i].AliasName);
if (hidItem != null)
{
hidItem.Value = values[i].ToTrim();
SetFeatureValue(hidItem);
}
}
RefreshView();
}
}
//MyPropertyGrid.ItemsSource = MyPropertyGrid.ItemsSource;
}
IFeature feature = Data as IFeature;
Platform.Instance.SendMsg(new NotifyMsgPackage() { Content = feature, MsgType = "RefreshViewAttrTable" });
Platform.Instance.SendMsg(new NotifyMsgPackage() { Content = feature, MsgType = "StartCheckD_BGTBMethod" });
}
catch (Exception ex)
{
//LogAPI.Debug("属性联动异常:" + ex);
LogAPI.Debug("属性改变事件期间 属性联动异常,异常信息如下:");
LogAPI.Debug(ex);
LogAPI.Debug("属性改变事件期间 属性联动异常信息结束");
}
}
private void SetFeatureValue(PropertyGridDataStruct proData)
{
if (Data is IFeature)
{
int index = (Data as IFeature).Fields.FindField(proData.Key);
if (index == -1)
index = (Data as IFeature).Fields.FindFieldByAliasName(proData.Key);
if (index != -1)
{
var val = (Data as IFeature).get_Value(index);
if (!val.Equals(proData.Value))
{
if (val is DBNull && string.IsNullOrWhiteSpace(proData.Value))
{
}
else
{
if (editor.EditState == esriEngineEditState.esriEngineStateEditing)
{
editor.StartOperation();
try
{
if (proData.Key == "耕地等别" && string.IsNullOrEmpty(proData.Value))
{
(Data as IFeature).set_Value(index, DBNull.Value);
}
else if (proData.Key == "线状地物宽度" && string.IsNullOrEmpty(proData.Value))
{
(Data as IFeature).set_Value(index, DBNull.Value);
}
else
{
if ((Data as IFeature).Fields.get_Field(index).Length < proData.Value.Length)
{
MessageHelper.ShowError(proData.Key + ":填写值长度过长!");
editor.AbortOperation();
return;
}
(Data as IFeature).set_Value(index, proData.Value);
}
(Data as IFeature).Store();
if (proData.Visible)
RefreshView();
if (editor.EditState == esriEngineEditState.esriEngineStateEditing)
{
editor.StopOperation("Attribute update");
ExecuteDataCheck(Data as IFeature);
}
}
catch (Exception ex2)
{
LogAPI.Debug("属性改变事件中 结束编辑操作期间 时异常,异常信息如下:");
LogAPI.Debug(ex2);
LogAPI.Debug("属性改变事件中 结束编辑操作期间 时异常信息结束");
editor.AbortOperation();
}
}
}
}
}
}
}
ControlsEditingSaveCommandClass saveCmd = null;
public void SaveEdit()
{
//if (saveCmd == null)
//{
// saveCmd = new ControlsEditingSaveCommandClass();
// saveCmd.OnCreate(MapsManager.Instance.MapService.Hook);
//}
//if (saveCmd.Enabled)
//{
// saveCmd.OnClick();
//}
SetVisible(Property);
}
public void ExecuteDataCheck(IFeature feature)
{
if (editor.EditState != esriEngineEditState.esriEngineStateEditing)
return;
IDataCheckHelper dataCheckHelper = UIShell.OSGi.BundleRuntime.Instance.GetFirstOrDefaultService<IDataCheckHelper>();
if (dataCheckHelper == null) return;
dataCheckHelper.DataCheckByThread(new CheckParametr()
{
CheckType = enumCheckType.Attribute | enumCheckType.Graphic,
DataSource = feature,
IDataCheckName = "BGQDataCheck"
});
}
private List<DataDicTionary> GetNoGroupDic(DicTypeEnum pDicType, List<DataDicTionary> dicList = null)
{
List<DataDicTionary> result = null;
try
{
string s = GetDicTypeID(pDicType);
if (string.IsNullOrWhiteSpace(s))
return result;
List<DataDicTionary> tempDic = dicList;
if (dicList == null || dicList.Count == 0)
tempDic = GetAllDic();
if (tempDic == null)
return result;
foreach (DataDicTionary item in tempDic)
{
if (item.OWNERDIC == s)
{
if (result == null)
{
result = new List<DataDicTionary>();
result.Add(new DataDicTionary() { CODE = "", NAME = "", DisplayName = "" });
}
result.Add(item);
}
}
}
catch (Exception ex)
{
throw ex;
}
return result;
}
private List<DataDicTionary> GetAllDic()
{
DataTable dt = null;
List<DataDicTionary> result = new List<DataDicTionary>();
IRDBHelper rdbHelper = null;
try
{
if ((MapsManager.Instance.CurrProjectInfo as ProjectInfo) != null)
{
string dbPath = ((MapsManager.Instance.CurrProjectInfo as ProjectInfo) as ProjectInfo).GetDicDataPath();
if (!string.IsNullOrWhiteSpace(dbPath))
{
rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite);
string strSQL = "select * from Sys_DicDetail";
dt = rdbHelper.ExecuteDatatable("Dic", strSQL, true);
if (dt != null)
{
result = KGIS.Framework.Utils.Utility.TBToList.ToList<DataDicTionary>(dt).OrderBy(x => x.CODE).ToList();
result.ForEach(x => x.DisplayName = x.CODE + "-" + x.NAME);
}
}
}
}
catch (Exception ex)
{
LogAPI.Debug(ex);
}
finally
{
if (rdbHelper != null)
{
rdbHelper.DisConnect();
}
if (dt != null)
{
dt.Clear();
dt.Dispose();
}
}
return result;
}
private Dictionary<string, string> DicTypes = new Dictionary<string, string>();
public string GetDicTypeID(DicTypeEnum pDicType, bool GetNewDic = false)
{
string result = string.Empty;
DataTable dtDicTypeID = null;
try
{
if (dtDicTypeID == null || GetNewDic)
{
IRDBHelper rdbHelper = null;
try
{
string dbPath = ((MapsManager.Instance.CurrProjectInfo as ProjectInfo) as ProjectInfo).GetDicDataPath();
if (string.IsNullOrWhiteSpace(dbPath))
{
LogAPI.Debug("GetDicDataPath 获取失败");
}
rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite);
string strSQL = "select ID,ALIASNAME from Sys_DicManage ";//WHERE ALIASNAME = '" + pDicType + "'";
dtDicTypeID = rdbHelper.ExecuteDatatable("DicType", strSQL, true);
}
catch (Exception ex)
{
LogAPI.Debug(ex);
}
finally
{
if (rdbHelper != null)
{
rdbHelper.DisConnect();
}
}
}
if (dtDicTypeID != null && dtDicTypeID.Rows.Count > 0)
{
foreach (DataRow item in dtDicTypeID.Rows)
{
if (item[0] != null && !(item[0] is DBNull))
{
if (item[1].ToString() == pDicType.ToString())
result = item[0].ToString();
if (DicTypes.ContainsKey(item[0].ToString()))
continue;
DicTypes.Add(item[0].ToString(), item[1].ToString());
}
}
}
return result;
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (dtDicTypeID != null)
{
dtDicTypeID.Clear();
dtDicTypeID.Dispose();
}
}
return string.Empty;
}
}
}