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
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); |
|
} |
|
} |
|
} |
|
}
|
|
|