年度变更建库软件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.
 
 

237 lines
7.6 KiB

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using ESRI.ArcGIS.Geodatabase;
using KGIS.Framework.Utils;
using KGIS.Framework.Utils.Helper;
namespace Kingo.Plugin.MakeTaskPackage.View
{
/// <summary>
/// FrmCustomExtent.xaml 的交互逻辑
/// </summary>
public partial class FrmXZQSelected : BaseWindow
{
public IFeatureClass ImportFeatureClass { get; set; }
public string CustomLayerPath { get; set; }
public string CustomLayerName { get; set; }
public List<string> KeyFieldsList = new List<string>();
public Dictionary<string, OSGeo.OGR.Geometry> geometrys = new Dictionary<string, OSGeo.OGR.Geometry> ();
public string KeyField = "";
public string WhereStr = "";
public Action GetCustomXZQInfo;
public FrmXZQSelected()
{
InitializeComponent();
}
private void FrmXZQSelected_Loaded(object sender, RoutedEventArgs e)
{
if (ImportFeatureClass == null) return;
IFeatureCursor featureCursor = null;
try
{
DataTable dtNew =null;
DataTable dtLayer = null;
if (CustomLayerPath.ToLower().Contains(".gdb") || CustomLayerPath.ToLower().Contains(".mdb"))
{
if(CustomLayerPath.ToLower().Contains(".gdb"))
CustomLayerPath = CustomLayerPath.Substring(0, CustomLayerPath.LastIndexOf(".gdb")+4);
dtLayer = Common.GdalShapeOperate.Instance.GDBToDataTable(CustomLayerPath, CustomLayerName);
}
else
{
dtLayer = Common.GdalShapeOperate.Instance.ShapeToDataTable(CustomLayerPath);
}
if (dtLayer != null)
{
dtNew = dtLayer.Clone();
foreach (DataRow s in dtLayer.Rows)
{
dtNew.ImportRow(s);//导入旧数据
}
if (dtNew != null)
{
GetCobFields(dtNew);
dtNew.Columns.Add("IsValid", typeof(bool));
foreach (System.Data.DataRow item in dtNew.Rows)
{
item["IsValid"] = false;
}
}
}
this.Dispatcher.Invoke(() =>
{
this.gridData.ItemsSource = null;
this.gridData.ItemsSource = dtNew;
this.gridData.Columns[0].AllowEditing = DevExpress.Utils.DefaultBoolean.True;
this.combFields.SelectedIndex = 0;
if (this.gridData.Columns["Shape"] != null)
this.gridData.Columns["Shape"].Visible = false;
if (this.gridData.Columns["SHAPE"] != null)
this.gridData.Columns["SHAPE"].Visible = false;
});
}
catch (Exception ex)
{
LogAPI.Debug(ex);
}
finally
{
if (featureCursor != null)
Marshal.FinalReleaseComObject(featureCursor);
}
}
/// <summary>
/// 获取下拉列表字段
/// </summary>
/// <param name="table"></param>
private void GetCobFields(DataTable table)
{
for (int i = 0; i < table.Columns.Count; i++)
{
DataColumn dc = table.Columns[i];
if (dc.ColumnName.ToLower() == "shape") continue;
Type fieldType = dc.DataType;
string whereStr = "";
switch (fieldType.Name)
{
case "Double":
case "Decimal":
case "Int32":
case "Int64":
whereStr = dc.ColumnName + "={0}";
break;
case "String":
whereStr = dc.ColumnName+ "='{0}'";
break;
default:
whereStr = dc.ColumnName + "='{0}'";
break;
}
AddComboxItem(dc.Caption, dc.ColumnName, whereStr);
}
}
private void AddComboxItem(string name, string code, string whereStr)
{
ComboxItemClass itemClass = new ComboxItemClass() { Name = name, Code = code, WhereStr = whereStr };
this.combFields.Items.Add(itemClass);
}
public class ComboxItemClass
{
public string Name { get; set; }
public string Code { get; set; }
public string WhereStr { get; set; }
}
private void btnOK_Click(object sender, RoutedEventArgs e)
{
KeyField = (this.combFields.SelectedItem as ComboxItemClass).Code;
WhereStr = (this.combFields.SelectedItem as ComboxItemClass).WhereStr;
DataTable dt = this.gridData.ItemsSource as DataTable;
foreach (DataRow item in dt.Rows)
{
if (item["IsValid"].ToString() == "True")
{
if (!KeyFieldsList.Contains(item[KeyField].ToString()))
KeyFieldsList.Add(item[KeyField].ToString());
if (!geometrys.Keys.Contains(item[KeyField].ToString()))
geometrys.Add(item[KeyField].ToString(), item["SHAPE"] as OSGeo.OGR.Geometry);
}
}
Type fieldType = dt.Columns[KeyField].DataType;
if (fieldType.Name.ToLower() != "double" && fieldType.Name.ToLower() != "decimal")
{
var data = (from a in dt.AsEnumerable()
group a by a.Field<string>(KeyField)
into g
where g.Count() > 1
select new
{
value = g.Key
}).ToList();
if (data != null && data.Count != 0)
{
MessageHelper.Show(string.Format("生成文件名称{0}字段值不唯一!请重新选择字段!", KeyField));
return;
}
}
if (GetCustomXZQInfo != null)
GetCustomXZQInfo();
this.Close();
}
private void btnCancel_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
try
{
if (gridData.SelectedItem != null)
{
DataRowView dr = (gridData.SelectedItem as DataRowView);
if ((sender as CheckBox).IsChecked == true)
{
dr["IsValid"] = true;
}
else
{
dr["IsValid"] = false;
}
}
}
catch (Exception ex)
{
LogAPI.Debug(ex);
}
}
}
}