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.
		
		
		
		
		
			
		
			
				
					
					
						
							247 lines
						
					
					
						
							10 KiB
						
					
					
				
			
		
		
	
	
							247 lines
						
					
					
						
							10 KiB
						
					
					
				using ESRI.ArcGIS.Carto; | 
						|
using ESRI.ArcGIS.Geodatabase; | 
						|
using KGIS.Framework.AE; | 
						|
using KGIS.Framework.DBOperator; | 
						|
using KGIS.Framework.Maps; | 
						|
using KGIS.Framework.Platform; | 
						|
using KGIS.Framework.Utils; | 
						|
using KGIS.Framework.Utils.Helper; | 
						|
using Kingo.PluginServiceInterface; | 
						|
using System; | 
						|
using System.Collections.Generic; | 
						|
using System.Data; | 
						|
using System.Linq; | 
						|
using System.Reflection; | 
						|
using System.Runtime.InteropServices; | 
						|
using System.Xml; | 
						|
 | 
						|
namespace Kingo.Plugin.DataDictionary.Helper | 
						|
{ | 
						|
    public class DicHelper | 
						|
    { | 
						|
        /// <summary> | 
						|
        /// 获取行政区字典数据 | 
						|
        /// </summary> | 
						|
        /// <param name="pLevel">行政级别(1:县、2:镇、3:村、4:海岛)</param> | 
						|
        public static BasicDataModel[] GetXZQDic(int pLevel) | 
						|
        { | 
						|
            List<BasicDataModel> result = new List<BasicDataModel>(); | 
						|
            if (pLevel == 1) | 
						|
            { | 
						|
                IRDBHelper helper = null; | 
						|
                DataTable dtData = null; | 
						|
                try | 
						|
                { | 
						|
                    string strConn = SysConfigsOprator.GetDBConnectionByName("MDBOledbConnection"); | 
						|
                    strConn = string.Format(strConn, SysAppPath.GetDataBaseRoot() + "System.mdb"); | 
						|
                    if (string.IsNullOrWhiteSpace(strConn)) | 
						|
                    { | 
						|
                        result = null; | 
						|
                    } | 
						|
                    helper = RDBFactory.CreateDbHelper(strConn, DatabaseType.MSAccess); | 
						|
                    string strSQL = string.Format("SELECT * FROM {0} where XZQ ='{1}'", "XZQ", ((MapsManager.Instance.CurrProjectInfo as ProjectInfo) as ProjectInfo).CODE); | 
						|
                    dtData = helper.ExecuteDatatable("dtData", strSQL, true); | 
						|
                    if (dtData != null) | 
						|
                    { | 
						|
                        foreach (DataRow row in dtData.Rows) | 
						|
                        { | 
						|
                            BasicDataModel node = new BasicDataModel(); | 
						|
                            node.Name = row["XZQMC"] is DBNull ? "" : row["XZQMC"].ToString(); | 
						|
                            node.Code = row["XZQ"].ToString(); | 
						|
                            node.DisplayName = string.Format("({0}){1}", node.Code, node.Name); | 
						|
                            node.Attribures = new Dictionary<string, object>(); | 
						|
                            foreach (DataColumn col in dtData.Columns) | 
						|
                            { | 
						|
                                node.Attribures.Add(col.ColumnName, row[col]); | 
						|
                            } | 
						|
                            result.Add(node); | 
						|
                        } | 
						|
                    } | 
						|
                    return result.ToArray(); | 
						|
                } | 
						|
                catch (Exception ex) | 
						|
                { | 
						|
                    LogAPI.Debug(ex); | 
						|
                } | 
						|
                finally | 
						|
                { | 
						|
                    if (dtData != null) | 
						|
                    { | 
						|
                        dtData.Clear(); | 
						|
                        dtData.Dispose(); | 
						|
                    } | 
						|
                    if (helper != null) | 
						|
                    { | 
						|
                        helper.DisConnect(); | 
						|
                    } | 
						|
                } | 
						|
            } | 
						|
            else if (pLevel == 2) | 
						|
            { | 
						|
                ICursor pCur = null; | 
						|
                try | 
						|
                { | 
						|
                    IFeatureLayer fcLayer = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("行政区"); | 
						|
                    if (fcLayer == null) | 
						|
                    { | 
						|
                        MessageHelper.Show("未获取到行政区图层数据!"); | 
						|
                        return result.ToArray(); | 
						|
                    } | 
						|
                    //获取基础mdb中的tbmj之和 | 
						|
                    IQueryDef pQDef = ((fcLayer.FeatureClass as FeatureClass).Workspace as IFeatureWorkspace).CreateQueryDef(); | 
						|
                    pQDef.Tables = (fcLayer.FeatureClass as FeatureClass).Name; | 
						|
                    pQDef.SubFields = "*"; | 
						|
                    pCur = pQDef.Evaluate(); | 
						|
                    IRow pRow = null; | 
						|
                    while ((pRow = pCur.NextRow()) != null) | 
						|
                    { | 
						|
                        BasicDataModel node = new BasicDataModel(); | 
						|
                        node.Name = pRow.get_Value(pRow.Fields.FindField("XZQMC")) is DBNull ? "" : pRow.get_Value(pRow.Fields.FindField("XZQMC")).ToString(); | 
						|
                        node.Code = pRow.get_Value(pRow.Fields.FindField("XZQDM")).ToString(); | 
						|
                        node.DisplayName = string.Format("({0}){1}", node.Code, node.Name); | 
						|
                        node.Attribures = new Dictionary<string, object>(); | 
						|
                        for (int i = 0; i < pRow.Fields.FieldCount; i++) | 
						|
                        { | 
						|
                            IField field = pRow.Fields.get_Field(i); | 
						|
                            if (field.Name.ToUpper() != "SHAPE") | 
						|
                            { | 
						|
                                node.Attribures.Add(field.Name, pRow.get_Value(pRow.Fields.FindField(field.Name))); | 
						|
                            } | 
						|
                        } | 
						|
                        result.Add(node); | 
						|
                    } | 
						|
 | 
						|
                    return result.ToArray(); | 
						|
                } | 
						|
                catch (Exception ex) | 
						|
                { | 
						|
                    LogAPI.Debug(ex); | 
						|
                } | 
						|
                finally | 
						|
                { | 
						|
                    if (pCur != null) | 
						|
                    { | 
						|
                        Marshal.ReleaseComObject(pCur); | 
						|
                    } | 
						|
                } | 
						|
            } | 
						|
            else if (pLevel == 3) | 
						|
            { | 
						|
                ICursor pCur = null; | 
						|
                try | 
						|
                { | 
						|
                    IFeatureLayer fcLayer = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("村级调查区"); | 
						|
 | 
						|
                    //获取基础mdb中的tbmj之和 | 
						|
                    IQueryDef pQDef = ((fcLayer.FeatureClass as FeatureClass).Workspace as IFeatureWorkspace).CreateQueryDef(); | 
						|
                    pQDef.Tables = (fcLayer.FeatureClass as FeatureClass).Name; | 
						|
                    pQDef.SubFields = "distinct ZLDWDM,ZLDWMC"; | 
						|
                    pCur = pQDef.Evaluate(); | 
						|
                    IRow pRow = null; | 
						|
                    while ((pRow = pCur.NextRow()) != null) | 
						|
                    { | 
						|
                        BasicDataModel node = new BasicDataModel(); | 
						|
                        node.Name = pRow.get_Value(pRow.Fields.FindField("ZLDWMC")) is DBNull ? "" : pRow.get_Value(pRow.Fields.FindField("ZLDWMC")).ToString(); | 
						|
                        node.Code = pRow.get_Value(pRow.Fields.FindField("ZLDWDM")).ToString().Substring(0, 12); | 
						|
                        node.DisplayName = string.Format("({0}){1}", node.Code, node.Name); | 
						|
                        node.Attribures = new Dictionary<string, object>(); | 
						|
                        result.Add(node); | 
						|
                    } | 
						|
                    return result.ToArray(); | 
						|
                } | 
						|
                catch (Exception ex) | 
						|
                { | 
						|
                    LogAPI.Debug(ex); | 
						|
                } | 
						|
                finally | 
						|
                { | 
						|
                    if (pCur != null) | 
						|
                    { | 
						|
                        Marshal.ReleaseComObject(pCur); | 
						|
                    } | 
						|
                } | 
						|
            } | 
						|
            else if (pLevel == 4) | 
						|
            { | 
						|
                ICursor pCur = null; | 
						|
                try | 
						|
                { | 
						|
                    IFeatureLayer fcLayer = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("村级调查区"); | 
						|
 | 
						|
                    //获取基础mdb中的tbmj之和 | 
						|
                    IQueryDef pQDef = ((fcLayer.FeatureClass as FeatureClass).Workspace as IFeatureWorkspace).CreateQueryDef(); | 
						|
                    pQDef.Tables = (fcLayer.FeatureClass as FeatureClass).Name; | 
						|
                    pQDef.SubFields = "distinct ZLDWDM,HDMC"; | 
						|
                    pCur = pQDef.Evaluate(); | 
						|
                    IRow pRow = null; | 
						|
                    while ((pRow = pCur.NextRow()) != null) | 
						|
                    { | 
						|
                        BasicDataModel node = new BasicDataModel(); | 
						|
                        node.Name = pRow.get_Value(pRow.Fields.FindField("HDMC")) is DBNull ? "" : pRow.get_Value(pRow.Fields.FindField("HDMC")).ToString(); | 
						|
                        node.Code = pRow.get_Value(pRow.Fields.FindField("ZLDWDM")).ToString().Substring(0, 12); | 
						|
                        node.DisplayName = string.Format("({0}){1}", node.Code, node.Name); | 
						|
                        node.Attribures = new Dictionary<string, object>(); | 
						|
                        result.Add(node); | 
						|
                    } | 
						|
                    return result.ToArray(); | 
						|
                } | 
						|
                catch (Exception ex) | 
						|
                { | 
						|
                    LogAPI.Debug(ex); | 
						|
                } | 
						|
                finally | 
						|
                { | 
						|
                    if (pCur != null) | 
						|
                    { | 
						|
                        Marshal.ReleaseComObject(pCur); | 
						|
                    } | 
						|
                } | 
						|
            } | 
						|
            return null; | 
						|
        } | 
						|
 | 
						|
        /// <summary> | 
						|
        /// 获取工程下的字典 | 
						|
        /// </summary> | 
						|
        /// <returns></returns> | 
						|
        public static List<DataDicTionary> GetAllDic() | 
						|
        { | 
						|
            DataTable dt = null; | 
						|
            List<DataDicTionary> result = new List<DataDicTionary>(); | 
						|
            IRDBHelper rdbHelper = null; | 
						|
            try | 
						|
            { | 
						|
                string dbPath = (MapsManager.Instance.CurrProjectInfo 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) | 
						|
                    { | 
						|
                        //Bug-12137 霍岩 2018-11-14 使用CODE字段按顺序排序 | 
						|
                        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; | 
						|
        } | 
						|
    } | 
						|
}
 | 
						|
 |