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.
317 lines
13 KiB
317 lines
13 KiB
using DevExpress.XtraEditors; |
|
using ESRI.ArcGIS.Carto; |
|
using ESRI.ArcGIS.Geodatabase; |
|
using KGIS.Framework.Utils.Helper; |
|
using KGIS.Plugin.LayerProperty.Helper; |
|
using KGIS.Plugin.LayerProperty.Interface; |
|
using KGIS.Plugin.LayerProperty.Utils; |
|
using System; |
|
using System.Collections.Generic; |
|
using System.Data; |
|
using System.Windows.Forms; |
|
|
|
namespace KGIS.Plugin.LayerProperty.View.UC_Controls |
|
{ |
|
public partial class UCFieldsPropertyPage : XtraUserControl, IUCPropertyPageEx, IPropertyPage |
|
{ |
|
private string m_DisplayField; |
|
private ILayer m_Layer; |
|
private UCFieldsList m_ucFieldsList; |
|
private bool isDirty; |
|
public event System.EventHandler EditorChanged; |
|
public bool IsPageDirty |
|
{ |
|
get |
|
{ |
|
return this.isDirty; |
|
} |
|
set |
|
{ |
|
this.isDirty = value; |
|
} |
|
} |
|
public int Priority |
|
{ |
|
get |
|
{ |
|
throw new Exception("The method or operation is not implemented."); |
|
} |
|
set |
|
{ |
|
throw new Exception("The method or operation is not implemented."); |
|
} |
|
} |
|
public string Title |
|
{ |
|
get |
|
{ |
|
throw new Exception("The method or operation is not implemented."); |
|
} |
|
set |
|
{ |
|
throw new Exception("The method or operation is not implemented."); |
|
} |
|
} |
|
private void ucFieldsCombox1_SelectedFieldChanged(IField field) |
|
{ |
|
if (field != null) |
|
{ |
|
this.m_DisplayField = field.Name; |
|
} |
|
this.InvokeEditValueChanged(null, null); |
|
} |
|
void btnExport_Click(object sender, System.EventArgs e) |
|
{ |
|
try |
|
{ |
|
if (Fields != null && Fields.FieldCount > 0) |
|
{ |
|
List<DataColumnEx> lstDataColumnEx = new List<DataColumnEx>(); |
|
DataTable dataTable = this.CreateDataTable(lstDataColumnEx); |
|
for (int i = 0; i < Fields.FieldCount; i++) |
|
{ |
|
IField field = Fields.get_Field(i); |
|
this.CreateDataRow(field, dataTable); |
|
} |
|
System.Windows.Forms.SaveFileDialog sfd = new System.Windows.Forms.SaveFileDialog(); |
|
sfd.Filter = "Excel(*.xlsx)|*.xlsx"; |
|
sfd.FilterIndex = 1; |
|
if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) |
|
{ |
|
ExportExcel.CreateAndAddTitle(sfd.FileName, "字段信息", lstDataColumnEx, dataTable); |
|
MessageHelper.ShowTips("导出成功!"); |
|
} |
|
} |
|
else |
|
{ |
|
MessageHelper.ShowTips("没有字段可以导出!"); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
//RdbUtil.AddException(ex); |
|
} |
|
} |
|
|
|
private DataTable CreateDataTable(List<DataColumnEx> lstDataColumnEx) |
|
{ |
|
try |
|
{ |
|
DataTable dataTable = new DataTable(); |
|
DataColumn dataColumn = new DataColumn("name", Type.GetType("System.String")); |
|
dataColumn.Caption = "名称"; |
|
dataTable.Columns.Add(dataColumn); |
|
lstDataColumnEx.Add(new DataColumnEx() { ColumnName = "name", ChineseName = "名称", Type = esriFieldType.esriFieldTypeString }); |
|
dataColumn = new DataColumn("alias", Type.GetType("System.String")); |
|
dataColumn.Caption = "别名"; |
|
dataTable.Columns.Add(dataColumn); |
|
lstDataColumnEx.Add(new DataColumnEx() { ColumnName = "alias", ChineseName = "别名", Type = esriFieldType.esriFieldTypeString }); |
|
dataColumn = new DataColumn("datatype", Type.GetType("System.String")); |
|
dataColumn.Caption = "类型"; |
|
dataTable.Columns.Add(dataColumn); |
|
lstDataColumnEx.Add(new DataColumnEx() { ColumnName = "datatype", ChineseName = "类型", Type = esriFieldType.esriFieldTypeString }); |
|
dataColumn = new DataColumn("length", Type.GetType("System.Int32")); |
|
dataColumn.Caption = "长度"; |
|
dataTable.Columns.Add(dataColumn); |
|
lstDataColumnEx.Add(new DataColumnEx() { ColumnName = "length", ChineseName = "长度", Type = esriFieldType.esriFieldTypeInteger }); |
|
dataColumn = new DataColumn("precision", Type.GetType("System.Int32")); |
|
dataColumn.Caption = "精度"; |
|
dataTable.Columns.Add(dataColumn); |
|
lstDataColumnEx.Add(new DataColumnEx() { ColumnName = "precision", ChineseName = "精度", Type = esriFieldType.esriFieldTypeInteger }); |
|
dataColumn = new DataColumn("scale", Type.GetType("System.Int32")); |
|
dataColumn.Caption = "数值范围"; |
|
dataTable.Columns.Add(dataColumn); |
|
lstDataColumnEx.Add(new DataColumnEx() { ColumnName = "scale", ChineseName = "数值范围", Type = esriFieldType.esriFieldTypeInteger }); |
|
dataColumn = new DataColumn("numberformat", Type.GetType("System.String")); |
|
dataColumn.Caption = "数字格式"; |
|
dataTable.Columns.Add(dataColumn); |
|
lstDataColumnEx.Add(new DataColumnEx() { ColumnName = "numberformat", ChineseName = "数字格式", Type = esriFieldType.esriFieldTypeString }); |
|
return dataTable; |
|
} |
|
catch (Exception ex) |
|
{ |
|
//RdbUtil.AddException(ex); |
|
} |
|
return null; |
|
} |
|
private void CreateDataRow(IField field, DataTable dt) |
|
{ |
|
DataRow dataRow = dt.NewRow(); |
|
try |
|
{ |
|
dataRow["name"] = field.Name; |
|
dataRow["alias"] = field.AliasName; |
|
string value = field.Type.ToString().Substring(13); |
|
dataRow["datatype"] = value; |
|
dataRow["length"] = field.Length; |
|
dataRow["precision"] = field.Precision; |
|
dataRow["scale"] = field.Scale; |
|
dt.Rows.Add(dataRow); |
|
} |
|
catch (Exception ex) |
|
{ |
|
//RdbUtil.AddException(ex); |
|
} |
|
} |
|
|
|
public UCFieldsPropertyPage() |
|
{ |
|
InitializeComponent(); |
|
this.m_ucFieldsList = new UCFieldsList(); |
|
this.m_ucFieldsList.Dock = DockStyle.Fill; |
|
groupControl1.Controls.Add(this.m_ucFieldsList); |
|
} |
|
public bool CanWrite2Prop() |
|
{ |
|
return this.isDirty; |
|
} |
|
private void InvokeEditValueChanged(object sender, System.EventArgs e) |
|
{ |
|
if (this.EditorChanged != null) |
|
{ |
|
this.EditorChanged(sender, e); |
|
} |
|
this.isDirty = true; |
|
} |
|
public void SetDefaultValue(object value) |
|
{ |
|
} |
|
|
|
IFields Fields = null; |
|
public void InitUC(object layerProperty) |
|
{ |
|
try |
|
{ |
|
this.m_Layer = (layerProperty as ILayer); |
|
this.m_ucFieldsList.InitUC(null); |
|
this.ucFieldsCombox1.InitFieldList(null, ""); |
|
if (layerProperty is IFeatureLayer) |
|
{ |
|
IFeatureLayer featureLayer = layerProperty as IFeatureLayer; |
|
if (featureLayer != null) |
|
{ |
|
this.ucFieldsCombox1.InitFieldList(featureLayer.FeatureClass.Fields, featureLayer.DisplayField, false, false, true); |
|
this.m_DisplayField = featureLayer.DisplayField; |
|
this.m_ucFieldsList.InitUC(featureLayer.FeatureClass.Fields); |
|
Fields = featureLayer.FeatureClass.Fields; |
|
} |
|
} |
|
else |
|
{ |
|
if (layerProperty is IRasterLayer) |
|
{ |
|
IAttributeTable attributeTable = layerProperty as IAttributeTable; |
|
if (attributeTable.AttributeTable != null) |
|
{ |
|
IRasterLayer rasterLayer = layerProperty as IRasterLayer; |
|
if (rasterLayer != null) |
|
{ |
|
int num = rasterLayer.PrimaryField; |
|
if (num == -1) |
|
{ |
|
num = 1; |
|
} |
|
this.ucFieldsCombox1.InitFieldList(attributeTable.AttributeTable.Fields, attributeTable.AttributeTable.Fields.get_Field(num).Name, false, false, true); |
|
this.m_DisplayField = attributeTable.AttributeTable.Fields.get_Field(num).Name; |
|
this.m_ucFieldsList.InitUC(attributeTable.AttributeTable.Fields); |
|
Fields = attributeTable.AttributeTable.Fields; |
|
} |
|
} |
|
} |
|
else |
|
{ |
|
if (layerProperty is IRasterCatalogLayer) |
|
{ |
|
IAttributeTable attributeTable2 = layerProperty as IAttributeTable; |
|
IRasterCatalogLayer rasterCatalogLayer = layerProperty as IRasterCatalogLayer; |
|
if (rasterCatalogLayer != null) |
|
{ |
|
int num2 = rasterCatalogLayer.PrimaryField; |
|
if (num2 == -1) |
|
{ |
|
num2 = 1; |
|
} |
|
this.ucFieldsCombox1.InitFieldList(attributeTable2.AttributeTable.Fields, attributeTable2.AttributeTable.Fields.get_Field(num2).Name, false, false, true); |
|
this.m_DisplayField = attributeTable2.AttributeTable.Fields.get_Field(num2).Name; |
|
this.m_ucFieldsList.InitUC(attributeTable2.AttributeTable.Fields); |
|
Fields = attributeTable2.AttributeTable.Fields; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
//RdbUtil.AddException(ex); |
|
} |
|
} |
|
|
|
public void InitFields(IFields fields) |
|
{ |
|
this.m_ucFieldsList.InitUC(fields); |
|
} |
|
public void Write2Prop() |
|
{ |
|
try |
|
{ |
|
if (this.m_Layer is IFeatureLayer) |
|
{ |
|
IFeatureLayer featureLayer = this.m_Layer as IFeatureLayer; |
|
if (featureLayer != null) |
|
{ |
|
featureLayer.DisplayField = this.m_DisplayField; |
|
} |
|
} |
|
else |
|
{ |
|
if (this.m_Layer is IRasterLayer) |
|
{ |
|
IAttributeTable attributeTable = this.m_Layer as IAttributeTable; |
|
IRasterLayer rasterLayer = this.m_Layer as IRasterLayer; |
|
if (rasterLayer != null) |
|
{ |
|
rasterLayer.PrimaryField = attributeTable.AttributeTable.FindField(this.m_DisplayField); |
|
} |
|
} |
|
else |
|
{ |
|
if (this.m_Layer is IRasterCatalogLayer) |
|
{ |
|
IAttributeTable attributeTable2 = this.m_Layer as IAttributeTable; |
|
IRasterCatalogLayer rasterCatalogLayer = this.m_Layer as IRasterCatalogLayer; |
|
if (rasterCatalogLayer != null) |
|
{ |
|
rasterCatalogLayer.PrimaryField = attributeTable2.AttributeTable.FindField(this.m_DisplayField); |
|
} |
|
} |
|
} |
|
} |
|
this.isDirty = false; |
|
} |
|
catch (Exception ex) |
|
{ |
|
//RdbUtil.AddException(ex); |
|
} |
|
} |
|
public int Activate() |
|
{ |
|
throw new Exception("The method or operation is not implemented."); |
|
} |
|
public void Deactivate() |
|
{ |
|
throw new Exception("The method or operation is not implemented."); |
|
} |
|
public void Cancel() |
|
{ |
|
throw new Exception("The method or operation is not implemented."); |
|
} |
|
//private void ucFieldsCombox1_SelectedFieldChanged(IField field) |
|
//{ |
|
// if (field != null) |
|
// { |
|
// this.m_DisplayField = field.Name; |
|
// } |
|
// this.InvokeEditValueChanged(null, null); |
|
//} |
|
} |
|
}
|
|
|