using DevExpress.Spreadsheet; using KGIS.Framework.DBOperator; using KGIS.Framework.Maps; using KGIS.Framework.Platform; using KGIS.Framework.Utils; using KGIS.Framework.Utils.Helper; using KGIS.Framework.Utils.Utility; using Kingo.PluginServiceInterface; using KUI.Windows; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.IO; using System.Linq; using System.Threading; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; namespace Kingo.Plugin.DataDictionary.Views { /// /// FrmDicManage.xaml 的交互逻辑 /// public partial class FrmDicManage : BaseWindow { #region 全局变量 private string connStr = string.Empty; string Cold = null; /// /// 导入权属单位集合 /// private List ListQsdwEntity = null; /// /// 权属单位集合-原始数据 /// private List ExcelLists = null; /// /// 处理掉的权属集合 /// private List RemoveQsdwEntity = null; /// /// 当前工程数据库连接 /// private string dbPath = string.Empty; /// /// 省级代码 /// KeyValuePair ShengInfo { get; set; } /// /// 市级代码 /// KeyValuePair ShiInfo { get; set; } /// /// 县级代码 /// KeyValuePair XianInfo { get; set; } /// /// 省级代码 /// List ShengInfo2 { get; set; } /// /// 市级代码 /// List ShiInfo2 { get; set; } /// /// 县级代码 /// List XianInfo2 { get; set; } public static FrmDicManage frmDicManage = new FrmDicManage(); private string XJFid = null; private string FJFid = null; #endregion public FrmDicManage() { InitializeComponent(); this.CustomToolTip = "权属代码可右键导入EXCEL(软件提供EXCEL模板)"; ListQsdwEntity = new List(); RemoveQsdwEntity = new List(); ExcelLists = new List(); dbPath = (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).GetDicDataPath(); Init(); frmDicManage = this; } /// /// 初始化 /// private void Init() { try { LoadTree(); btnDetailAdd.IsEnabled = false; btnDetailEdit.IsEnabled = false; btnDetailDel.IsEnabled = false; } catch (Exception ex) { LogAPI.Debug("字典界面初始化失败:" + ex.Message); MessageHelper.ShowError("字典界面初始化失败:" + ex.Message); } } /// /// 加载数据 /// /// /// public void LoadTree() { IRDBHelper rdbHelper = null; try { rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); if (rdbHelper == null) { throw new Exception("数据库连接打开失败:" + dbPath); } DataTable dicType = rdbHelper.ExecuteDatatable("Sys_DicType", " SELECT * FROM Sys_DicType ORDER BY paixu ", true); ObservableCollection itemList = new ObservableCollection(); DataTable dt = rdbHelper.ExecuteDatatable("Sys_DicManage", "SELECT * FROM Sys_DicManage ORDER BY paixu", true); foreach (DataRow item in dicType.Rows) { TreeNode node = new TreeNode() { Name = item["NAME"].ToString(), Paixu = Convert.ToInt32(item["paixu"]), IsExpanded = true, Icon = "pack://application:,,,/Kingo.Plugin.DataDictionary;component/Resources/zrz.png", IsParent = true, Data = item }; node.Nodes = new ObservableCollection(); foreach (DataRow drvitem in dt.Rows) { TreeNode childNodeItem = new TreeNode();//树节点赋值属性 childNodeItem.Name = drvitem["NAME"].ToString(); childNodeItem.Paixu = Convert.ToInt32(drvitem["PAIXU"]); childNodeItem.IsExpanded = true; childNodeItem.Data = drvitem; childNodeItem.Icon = "pack://application:,,,/Kingo.Plugin.DataDictionary;component/Resources/zrz.png"; if (childNodeItem.Name == "权属代码") { QSXZchildNodeItem = childNodeItem; childNodeItem.cMenu = new ContextMenu(); MenuItem tmpitem = new MenuItem(); tmpitem.Header = "导入Excel"; tmpitem.Click += (s, e) => { var excelfileurl = string.Empty; //弹出文件选择对话框 var openFileDialog = new Microsoft.Win32.OpenFileDialog() { Filter = "Excel Files(*.xlsx)|*.xlsx" }; var result = openFileDialog.ShowDialog(); if (result == true) { ImportExcel(openFileDialog.FileName); } }; childNodeItem.cMenu.Items.Add(tmpitem); tmpitem = new MenuItem(); tmpitem.Header = "导出样式表"; tmpitem.Click += (s, e) => { var excelfileurl = ""; //弹出文件选择对话框 var saveFileDialog = new Microsoft.Win32.SaveFileDialog() { Filter = "Excel Files(*.xlsx)|*.xlsx" }; var result = saveFileDialog.ShowDialog(); if (result.Value) { excelfileurl = saveFileDialog.FileName; var sourcesfile = AppDomain.CurrentDomain.BaseDirectory + @"工作空间\模板\字典模板\权属单位代码样式表.xlsx"; if (System.IO.File.Exists(sourcesfile)) { try { System.IO.File.Copy(sourcesfile, excelfileurl, true); if (MessageHelper.ShowYesNoAndTips("样式表导出成功,是否打开?") == System.Windows.Forms.DialogResult.Yes) { Process.Start(excelfileurl); } } catch (Exception ex) { MessageHelper.ShowError("导出样式表失败,错误信息:" + ex.Message); } } else { MessageHelper.ShowError("样式表文件不存在,导出失败!"); } } }; childNodeItem.cMenu.Items.Add(tmpitem); } node.Nodes.Add(childNodeItem); } itemList.Add(node); } this.tvTypes.ItemsSource = null; this.tvTypes.ItemsSource = itemList; } catch (Exception ex) { MessageHelper.ShowError("数据加载异常!" + ex.Message); LogAPI.Debug("LoadTree异常:" + ex.Message); LogAPI.Debug("LoadTree异常:" + ex.StackTrace); } finally { if (rdbHelper != null) { rdbHelper.DisConnect(); } } } /// /// 返回指示文件是否已被其它程序使用的布尔值 /// /// 文件的完全限定名,例如:“C:\MyFile.txt”。 /// 如果文件已被其它程序使用,则为 true;否则为 false。 public Boolean FileIsUsed(String fileFullName) { Boolean result = false; //判断文件是否存在,如果不存在,直接返回 false if (!System.IO.File.Exists(fileFullName)) { result = false; } else { //如果文件存在,则继续判断文件是否已被其它程序使用 //逻辑:尝试执行打开文件的操作,如果文件已经被其它程序使用,则打开失败,抛出异常,根据此类异常可以判断文件是否已被其它程序使用。 System.IO.FileStream fileStream = null; try { fileStream = System.IO.File.Open(fileFullName, System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite, System.IO.FileShare.None); result = false; } catch (System.IO.IOException) { result = true; } catch (System.Exception) { result = true; } finally { if (fileStream != null) { fileStream.Close(); } } } return result; } /// /// 处理字典数据(区分县级与村级权属代码) /// private void Run() { ListQsdwEntity.ForEach(item => { if (string.IsNullOrWhiteSpace(item.ZLDWDM) == false && string.IsNullOrWhiteSpace(item.Qsdwdm) == false) { if (item.ZLDWDM.Length == 12) { item.ZLDWDM = item.ZLDWDM.PadRight(19, '0'); } if (item.ZLDWDM.Length != 19) { item.HasCheck = false; } if (item.Qsdwdm.Length == 12) { item.Qsdwdm = item.Qsdwdm.PadRight(19, '0'); } if (item.Qsdwdm.Length != 19) { item.HasCheck = false; } } else { item.HasCheck = false; } }); List remove = ListQsdwEntity.FindAll(f => f.HasCheck == false); for (int i = 0; i < remove.Count; i++) { RemoveQsdwEntity.Add(remove[i]); ListQsdwEntity.Remove(remove[i]); } } private string QsdmID = null; private List ListQsdm = null; /// /// 处理字典数据 /// /// /// public void OrderBy(string XJCode, string XJName) { try { if (ListQsdwEntity != null && ListQsdwEntity.Count > 0) { string XJName_Temp = string.Empty; ListQsdm = new List(); var GroupEntity = ListQsdwEntity.Where(x => x.ZLDWDM.Length == 19).GroupBy(x => x.ZLDWDM.Substring(0, 9)).Select(x => x.Key).ToList(); string skajh = string.Empty; if (ListQsdwEntity.FirstOrDefault(x => x.Qsdwmc == "部队") != null) skajh = ListQsdwEntity.FirstOrDefault(x => x.Qsdwmc == "部队").Qsdwdm; if (ListQsdwEntity.FirstOrDefault(x => x.Qsdwdm == XJCode.PadRight(19, '0')) != null) XJName_Temp = ListQsdwEntity.FirstOrDefault(x => x.Qsdwdm == XJCode.PadRight(19, '0')).Qsdwmc; foreach (var item in GroupEntity)//截取乡镇权属代码 { QSDWinformation Qsdm = new QSDWinformation(); Qsdm.ZLDWDM = item; Qsdm.Qsdwdm = item; if (item == XJCode.PadRight(9, '0') && XJName_Temp != XJName)//特殊状况(非飞入地,且与当前县级权属代码一致) { Qsdm.Qsdwmc = XJName_Temp; Qsdm.Zldwmc = XJName_Temp; Qsdm.ListQsdwInfor = null; ListQsdm.Add(Qsdm); continue; } string sXian_Temp1 = ""; if (ExcelLists != null && ExcelLists.Count > 0) { for (int i = 0; i < ExcelLists.Count(); i++) { if (ExcelLists[i].ZLDWDM == item.ToString()) { sXian_Temp1 = ExcelLists[i].Qsdwmc; break; } else { continue; } } Qsdm.Qsdwmc = string.IsNullOrWhiteSpace(sXian_Temp1) == true ? ExcelLists.FirstOrDefault(p => p.ZLDWDM.PadRight(19, '0').Substring(0, 9) == item.ToString()).Qsdwmc : sXian_Temp1; } string sXian_Temp2 = ""; if (ExcelLists != null && ExcelLists.Count > 0) { for (int i = 0; i < ExcelLists.Count(); i++) { if (ExcelLists[i].ZLDWDM == item.ToString()) { sXian_Temp2 = ExcelLists[i].Zldwmc; break; } else { continue; } } Qsdm.Zldwmc = string.IsNullOrWhiteSpace(sXian_Temp2) == true ? ExcelLists.FirstOrDefault(p => p.ZLDWDM.PadRight(19, '0').Substring(0, 9) == item.ToString()).Zldwmc : sXian_Temp2; } List ListCjQsdm = new List(); var CJGroupEntity = ListQsdwEntity.Where(x => x.HasCheck).GroupBy(x => x.ZLDWDM.Substring(0, 12)).OrderBy(x => x.Key).Select(x => x.Key).Distinct().ToList(); var tmpcjglist = CJGroupEntity.Where(x => x.Substring(0, 9) == item).ToList(); foreach (var CJitem in tmpcjglist)//截取村级权属代码 { QSDWinformation CjQsdm = new QSDWinformation(); CjQsdm.Qsdwdm = ExcelLists.FirstOrDefault(p => { bool result = false; if (p.ZLDWDM.Length > 12) { result = p.ZLDWDM.Substring(0, 12) == CJitem.ToString(); } return result; }).Qsdwdm; CjQsdm.ZLDWDM = ExcelLists.FirstOrDefault(p => { bool result = false; if (p.ZLDWDM.Length > 12) { result = p.ZLDWDM.Substring(0, 12) == CJitem.ToString(); } return result; }).ZLDWDM; CjQsdm.Qsdwmc = ExcelLists.FirstOrDefault(p => { bool result = false; if (p.ZLDWDM.Length > 12) { result = p.ZLDWDM.Substring(0, 12) == CJitem.ToString(); } return result; }).Qsdwmc; CjQsdm.Zldwmc = ExcelLists.FirstOrDefault(p => { bool result = false; if (p.ZLDWDM.Length > 12) { result = p.ZLDWDM.Substring(0, 12) == CJitem.ToString(); } return result; }).Zldwmc; #region var cjlist = ListQsdwEntity.Where(x => x.ZLDWDM.StartsWith(CJitem)).ToList(); var keylist = cjlist.Select(x => x.ZLDWDM).Distinct().ToList(); foreach (var citem in keylist) { List ListCjDMQsdm = new List(); var CJDMGroupEntity = ListQsdwEntity.Where(x => x.HasCheck).GroupBy(x => x.Qsdwdm).Select(x => x.Key).Distinct().ToList(); var tmpglist = CJDMGroupEntity.Where(x => x.Substring(0, 12) == CJitem).ToList(); foreach (var CJDMitem in tmpglist)//获取村级代码 { var cjkeylist = ListQsdwEntity.Where(x => x.HasCheck && x.Qsdwdm == CJDMitem).Distinct().ToList(); foreach (var itemsD in cjkeylist)//获取村级小组权属代码名称 { var cu = ListCjDMQsdm.Count(x => x.Qsdwdm == CJDMitem && x.Qsdwmc == itemsD.Qsdwmc); if (cu == 0) { QSDWinformation CjDMQsdm = new QSDWinformation(); CjDMQsdm.Qsdwdm = CJDMitem; CjDMQsdm.Qsdwmc = itemsD.Qsdwmc; ListCjDMQsdm.Add(CjDMQsdm); } } } CjQsdm.ListQsdwInfor = ListCjDMQsdm; } ListCjQsdm.Add(CjQsdm); #endregion } Qsdm.ListQsdwInfor = ListCjQsdm; ListQsdm.Add(Qsdm); } } } catch (Exception ex) { LogAPI.Debug(ex.Message); throw ex; } } /// /// 检查数据库是否已经存在权属单位代码字典 /// private void CheckExist(TreeNode selectnode) { IRDBHelper rdbHelper = null; DataRow selectitemrow = selectnode.Data as DataRow; try { rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); if (rdbHelper == null) { throw new Exception("打开数据库连接失败!"); } rdbHelper.BeginTransaction(); DataTable dtDict = rdbHelper.ExecuteDatatable("Sys_DicType", "select * from Sys_DicManage where NAME='权属代码'", true); //数据库已存在 if (dtDict != null && dtDict.Rows.Count > 0) { QsdmID = dtDict.Rows[0]["ID"].ToString(); DataTable dtDetail = rdbHelper.ExecuteDatatable("Sys_DicDetail", "select * from Sys_DicDetail where OWNERDIC='" + QsdmID + "'", true); if (dtDetail != null && dtDetail.Rows.Count > 0) { this.ShowLoading("正在导入字典......", 0, 0); //先删除数据库已存在的字典 int insertCount = rdbHelper.ExecuteSQL("DELETE FROM Sys_DicManage WHERE NAME = '权属代码' AND TYPE=1"); if (insertCount < 0) { throw new Exception("删除已存在字典失败!"); } insertCount = rdbHelper.ExecuteSQL("DELETE FROM Sys_DicDetail WHERE OWNERDIC = '" + QsdmID + "'"); if (insertCount < 0) { throw new Exception("删除已存在字典失败!"); } //插入Sys_DicManage表 insertCount = rdbHelper.ExecuteSQL("INSERT INTO Sys_DicManage (NAME,ALIASNAME,TYPE,REMARK,PAIXU)" + "VALUES ('权属代码','QSDM',1,'',0)"); if (insertCount < 0) { throw new Exception("导入字典失败!"); } } } else//数据库不存在权属单位代码字典 { this.ShowLoading("正在导入字典......", 0, 0); //插入Sys_DicManage表 int insertCount = rdbHelper.ExecuteSQL("INSERT INTO Sys_DicManage (NAME,ALIASNAME,TYPE,REMARK,PAIXU)" + "VALUES ('权属代码','QSDM',1,'',0)"); if (insertCount < 0) { throw new Exception("导入字典失败!"); } } InserDataDic(rdbHelper); //修改原因:不需要将字典保存到工程文件中 修改人:高山 修改时间:2019.09.21 //SaveProjectDic(); if (FJFid != null) { selectitemrow["id"] = FJFid; } rdbHelper.Commit(); //从新加载树 LoadChildTree(selectnode); this.CloseLoading(); MessageHelper.ShowTips("导入字典成功!"); } catch (Exception ex) { rdbHelper.Rollback(); this.CloseLoading(); MessageHelper.ShowError(ex.Message); } finally { this.CloseLoading(); if (rdbHelper != null) { rdbHelper.DisConnect(); } } } public bool InserDataLsitSon(IRDBHelper rdbHelper, string pParendXZQDM = "") { try { if (ListQsdm != null && ListQsdm.Count > 0) { foreach (var item in ListQsdm) { if (!string.IsNullOrWhiteSpace(pParendXZQDM) && !item.Qsdwdm.StartsWith(pParendXZQDM)) continue; string strSql = string.Format("insert into Sys_DicDetail(PID,NAME,CODE,OWNERDIC,REMARK,PAIXU) VALUES ('{0}','{1}','{2}','{3}','{4}',{5})", XJFid, item.Zldwmc, item.ZLDWDM, FJFid, "", 0); if (rdbHelper.ExecuteSQL(strSql) > 0) { DataTable dts = rdbHelper.ExecuteDatatable("XjTable", string.Format("select id from Sys_DicDetail where PID='{0}' and NAME='{1}' and CODE='{2}' and OWNERDIC='{3}'", XJFid, item.Zldwmc, item.ZLDWDM, FJFid), true); if (item.ListQsdwInfor == null) continue;//特殊情况 foreach (var CJitem in item.ListQsdwInfor) { if (dts == null || dts.Rows.Count <= 0) { continue; } string strSqlCJ = string.Format("insert into Sys_DicDetail(PID,NAME,CODE,OWNERDIC,REMARK,PAIXU) VALUES ('{0}','{1}','{2}','{3}','{4}',{5})", dts.Rows[0]["ID"].ToString(), CJitem.Zldwmc, CJitem.ZLDWDM, FJFid, "", 0); if (rdbHelper.ExecuteSQL(strSqlCJ) <= 0) { continue; } DataTable dtCJDM = rdbHelper.ExecuteDatatable("CJDMTables", string.Format("select id from Sys_DicDetail where PID='{0}' and NAME='{1}' and CODE='{2}' and OWNERDIC='{3}'", dts.Rows[0]["ID"].ToString(), CJitem.Zldwmc, CJitem.ZLDWDM, FJFid), true); if (CJitem.ListQsdwInfor == null || CJitem.ListQsdwInfor.Count == 0) { continue; } if (CJitem.ListQsdwInfor == null) continue;//特殊情况 foreach (var CJDMitem in CJitem.ListQsdwInfor) { string CJDMstrSql = string.Format("insert into Sys_DicDetail(PID,NAME,CODE,OWNERDIC,REMARK,PAIXU) VALUES ('{0}','{1}','{2}','{3}','{4}',{5})", dtCJDM.Rows[0]["ID"].ToString(), CJDMitem.Qsdwmc, CJDMitem.Qsdwdm, FJFid, "", 0); if (rdbHelper.ExecuteSQL(CJDMstrSql) < 1) { return false; } } } } } return true; } return false; ; } catch (Exception e) { // rdbHelper.Rollback(); return false; throw e; } finally { } } /// /// 插入字典数据 /// /// 数据库连接 private void InserDataDic(IRDBHelper rdbHelper) { try { DataTable QuerySon = rdbHelper.ExecuteDatatable("QuerySon", "SELECT ID FROM Sys_DicManage WHERE NAME='权属代码'", false); string strSql = string.Empty; if (QuerySon == null || QuerySon.Rows.Count <= 0) return; foreach (var item in ShengInfo2) { if (!string.IsNullOrWhiteSpace(item.Qsdwdm)) { strSql = string.Format("insert into Sys_DicDetail (PID,NAME,CODE,OWNERDIC,REMARK,PAIXU)" + "VALUES ('{0}','{1}','{2}','{3}','{4}',{5})", "", item.Qsdwmc.Trim(), item.Qsdwdm, QuerySon.Rows[0]["ID"].ToString(), "", 0); } else { strSql = string.Format("insert into Sys_DicDetail (PID,NAME,CODE,OWNERDIC,REMARK,PAIXU)" + "VALUES ('{0}','{1}','{2}','{3}','{4}',{5})", "", item.Qsdwmc.Trim(), item.Qsdwmc, QuerySon.Rows[0]["ID"].ToString(), "", 0); } int insertCount = rdbHelper.ExecuteSQL(strSql); if (insertCount <= 0) return; DataTable QueryQSSon = null; if (!string.IsNullOrWhiteSpace(item.Qsdwdm)) { QueryQSSon = rdbHelper.ExecuteDatatable("QueryQS", string.Format("SELECT ID FROM Sys_DicDetail WHERE NAME='{0}' AND PID='' AND CODE='{1}' AND OWNERDIC='{2}'", item.Qsdwmc.Trim(), item.Qsdwdm, QuerySon.Rows[0]["ID"].ToString()), true); } else { QueryQSSon = rdbHelper.ExecuteDatatable("QueryQS", string.Format("SELECT ID FROM Sys_DicDetail WHERE NAME='{0}' AND PID='' AND CODE='{1}' AND OWNERDIC='{2}'", item.Qsdwmc.Trim(), item.Qsdwmc.Trim(), QuerySon.Rows[0]["ID"].ToString()), true); } if (QueryQSSon == null || QueryQSSon.Rows.Count <= 0) return; foreach (var shi in ShiInfo2) { if (!string.IsNullOrWhiteSpace(shi.Qsdwdm)) { strSql = string.Format("insert into Sys_DicDetail (PID,NAME,CODE,OWNERDIC,REMARK,PAIXU)" + "VALUES ('{0}','{1}','{2}','{3}','{4}',{5})", QueryQSSon.Rows[0]["ID"].ToString(), shi.Qsdwmc.Trim(), shi.Qsdwdm, QuerySon.Rows[0]["ID"].ToString(), "", 0); } else { strSql = string.Format("insert into Sys_DicDetail (PID,NAME,CODE,OWNERDIC,REMARK,PAIXU)" + "VALUES ('{0}','{1}','{2}','{3}','{4}',{5})", QueryQSSon.Rows[0]["ID"].ToString(), shi.Qsdwmc.Trim(), shi.Qsdwmc.Trim(), QuerySon.Rows[0]["ID"].ToString(), "", 0); } insertCount = rdbHelper.ExecuteSQL(strSql); if (insertCount <= 0) return; DataTable QueryQSSons = null; if (!string.IsNullOrWhiteSpace(shi.Qsdwdm)) { QueryQSSons = rdbHelper.ExecuteDatatable("QueryQSs", string.Format("SELECT ID FROM Sys_DicDetail WHERE NAME='{0}' AND PID='{1}' AND CODE='{2}' AND OWNERDIC='{3}'", shi.Qsdwmc.Trim(), QueryQSSon.Rows[0]["ID"].ToString(), shi.Qsdwdm, QuerySon.Rows[0]["ID"].ToString()), true); } else { QueryQSSons = rdbHelper.ExecuteDatatable("QueryQSs", string.Format("SELECT ID FROM Sys_DicDetail WHERE NAME='{0}' AND PID='{1}' AND CODE='{2}' AND OWNERDIC='{3}'", shi.Qsdwmc.Trim(), QueryQSSon.Rows[0]["ID"].ToString(), shi.Qsdwdm.Trim(), QuerySon.Rows[0]["ID"].ToString()), true); } if (QueryQSSons == null || QueryQSSons.Rows.Count <= 0) return; foreach (var xian in XianInfo2) { if (!string.IsNullOrWhiteSpace(xian.Qsdwdm)) { strSql = string.Format("insert into Sys_DicDetail (PID,NAME,CODE,OWNERDIC,REMARK,PAIXU)" + "VALUES ('{0}','{1}','{2}','{3}','{4}',{5})", QueryQSSons.Rows[0]["ID"].ToString(), xian.Qsdwmc.Trim(), xian.Qsdwdm, QuerySon.Rows[0]["ID"].ToString(), "", 0); } else { strSql = string.Format("insert into Sys_DicDetail (PID,NAME,CODE,OWNERDIC,REMARK,PAIXU)" + "VALUES ('{0}','{1}','{2}','{3}','{4}',{5})", QueryQSSons.Rows[0]["ID"].ToString(), xian.Qsdwmc.Trim(), xian.Qsdwmc.Trim(), QuerySon.Rows[0]["ID"].ToString(), "", 0); } insertCount = rdbHelper.ExecuteSQL(strSql); if (insertCount <= 0) return; DataTable QueryQSSonsd = null; if (xian.Qsdwdm != "") { QueryQSSonsd = rdbHelper.ExecuteDatatable("QueryQSsd", string.Format("SELECT ID FROM Sys_DicDetail WHERE NAME='{0}' AND PID='{1}' AND CODE='{2}' AND OWNERDIC='{3}'", xian.Qsdwmc.Trim(), QueryQSSons.Rows[0]["ID"].ToString(), xian.Qsdwdm, QuerySon.Rows[0]["ID"].ToString()), true); } else { QueryQSSonsd = rdbHelper.ExecuteDatatable("QueryQSsd", string.Format("SELECT ID FROM Sys_DicDetail WHERE NAME='{0}' AND PID='{1}' AND CODE='{2}' AND OWNERDIC='{3}'", xian.Qsdwmc.Trim(), QueryQSSons.Rows[0]["ID"].ToString(), xian.Qsdwmc.Trim(), QuerySon.Rows[0]["ID"].ToString()), true); } if (QueryQSSonsd != null && QueryQSSonsd.Rows.Count > 0) { XJFid = QueryQSSonsd.Rows[0]["ID"].ToString(); FJFid = QuerySon.Rows[0]["ID"].ToString(); InserDataLsitSon(rdbHelper, xian.Qsdwdm); } } } } } catch (Exception ex) { throw ex; } } /// /// 左侧字典树选择改变事件 /// /// /// private void tvProperties_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs e) { TreeNode item = this.tvTypes.SelectedItem as TreeNode; LoadChildTree(item); } private void LoadChildTree(TreeNode item) { IRDBHelper rdbHelper = null; try { this.btnAdd.IsEnabled = true; txtDicName.Text = string.Empty; txtCode.Text = string.Empty; txtAliasName.Text = string.Empty; txtParentName.Text = string.Empty; txtRemark.Text = string.Empty; tvDicDetail.ItemsSource = null; if (item == null || item.Data == null || (item.Data as DataRow) == null) return; DataRow drv = item.Data as DataRow; txtDicName.Text = drv["Name"] == null ? "" : drv["Name"].ToString(); txtRemark.Text = drv["REMARK"] == null ? "" : drv["REMARK"].ToString(); txtAliasName.Text = drv["ALIASNAME"] == null ? "" : drv["ALIASNAME"].ToString(); if (item.IsParent == false) { this.btnAdd.IsEnabled = false; txtDicID.Text = drv["ID"] == null ? "" : drv["ID"].ToString(); rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); if (rdbHelper == null) { throw new Exception("数据库连接打开失败:" + dbPath); } DataTable dtDict = rdbHelper.ExecuteDatatable("Sys_DicType", "SELECT * FROM Sys_DicType WHERE ID = " + drv["TYPE"].ToString(), true); if (dtDict != null && dtDict.Rows.Count > 0) { txtParentName.Text = dtDict.Rows[0]["NAME"].ToString(); } //绑定树 LoadChildTree(drv); btnDetailAdd.IsEnabled = true; btnDetailEdit.IsEnabled = true; btnDetailDel.IsEnabled = true; } else { btnDetailAdd.IsEnabled = false; ; btnDetailEdit.IsEnabled = false; btnDetailDel.IsEnabled = false; } } catch (Exception ex) { MessageHelper.ShowError("显示字典详情异常:" + ex.Message); } finally { if (rdbHelper != null) { rdbHelper.DisConnect(); } } } /// /// 加载左侧选中字典的子节点 /// /// /// private void LoadChildTree(DataRow drv) { if (drv == null) return; IRDBHelper rdbHelper = null; try { rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); if (rdbHelper == null) { throw new Exception("数据库连接打开失败:" + dbPath); } DataTable dtDic = rdbHelper.ExecuteDatatable("Sys_DicDetail", string.Format("SELECT * FROM Sys_DicDetail WHERE OWNERDIC='{0}' ORDER BY PAIXU", drv["ID"]), true); ObservableCollection itemList = new ObservableCollection(); DicTreeNode node = new DicTreeNode() { Name = drv["NAME"] == null ? "" : drv["NAME"].ToString(), Paixu = Convert.ToInt32(drv["paixu"]), Icon = "pack://application:,,,/Kingo.Plugin.DataDictionary;component/Resources/zrz.png", IsExpanded = true, IsParent = true, Data = drv }; node.Nodes = new ObservableCollection(); DataRow[] dataRow = dtDic.Select("PID IS NULL OR PID=''", "PAIXU,CODE ASC"); if (dataRow != null || dataRow.Count() > 0) { foreach (DataRow dr in dataRow) { DicTreeNode subNodeItem = new DicTreeNode() { Name = "[" + dr["CODE"].ToString() + "]" + dr["NAME"].ToString(), Paixu = Convert.ToInt32(dr["paixu"]), IsExpanded = true, Icon = "pack://application:,,,/Kingo.Plugin.DataDictionary;component/Resources/zrz.png", Data = dr }; if (dr["ID"] != null && !string.IsNullOrWhiteSpace(dr["ID"].ToString())) { GetSubDic(subNodeItem, dr["ID"].ToString(), dtDic); } node.Nodes.Add(subNodeItem); } } itemList.Add(node); this.tvDicDetail.ItemsSource = itemList; } catch (Exception ex) { MessageHelper.ShowError("数据加载异常!" + ex.Message); LogAPI.Debug(ex); } finally { if (rdbHelper != null) { rdbHelper.DisConnect(); } } } private void GetSubDic(DicTreeNode treeNode, string id, DataTable dt) { try { treeNode.Nodes = new ObservableCollection(); DataRow[] drs = null; if (dt.Columns.Contains("CODE")) { drs = dt.Select(" PID= '" + id + "'", "PAIXU,CODE ASC"); } else { drs = dt.Select(" PID= '" + id + "'", "PAIXU ASC"); } if (drs == null || drs.Count() <= 0) { return; } foreach (DataRow dr in drs) { DicTreeNode subNodeItem = new DicTreeNode() { Name = "[" + dr["CODE"].ToString() + "]" + dr["NAME"].ToString(), Paixu = Convert.ToInt32(dr["paixu"]), IsExpanded = false, Icon = "pack://application:,,,/Kingo.Plugin.DataDictionary;component/Resources/zrz.png", Data = dr }; if (dr["ID"] == null || string.IsNullOrWhiteSpace(dr["ID"].ToString())) { continue; ; } GetSubDic(subNodeItem, dr["ID"].ToString(), dt); treeNode.Nodes.Add(subNodeItem); } } catch (Exception ex) { throw ex; } } //关闭 private void btnClose_Click(object sender, RoutedEventArgs e) { this.Close(); } /// /// 添加字典(左侧树添加) /// /// /// private void btnAdd_Click(object sender, RoutedEventArgs e) { try { ParentTable = null; txtNames = null; txtParent = false; int IndexInfo = 0; //白明雅 2018-12-28 bug13997 DicTreeNode item = GetDicTreeNodeByTreeNode(this.tvTypes.SelectedItem as TreeNode); //DicTreeNode item = this.tvTypes.SelectedItem as DicTreeNode; if (item == null) { MessageHelper.ShowTips("请选择节点!"); return; } for (int i = 0; i < this.tvTypes.Items.Count; i++) { if (item.Name.Trim() == (GetDicTreeNodeByTreeNode(this.tvTypes.Items[i] as TreeNode)).Name.Trim()) { IndexInfo = i + 1; break; } } DataDicEdit main = new DataDicEdit(IndexInfo); main.actionUpdate = action_Update; main.Height = 410; main.Width = 550; main.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen; //关闭窗体之后刷新tree控件 bool temp = main.ShowInMainWindow(true).Value; if (!temp) { //CustomLogAPI.WriteSystemOperationLog("数据新增", this.Title); if (txtNames == null) { return; } if (item == null || ((item != null) && txtParent)) { //白明雅 2018-12-28 bug13997 //ObservableCollection treeNodes = this.tvTypes.ItemsSource as ObservableCollection; ObservableCollection treeNodes = IEnumerableToDicTreeNode(this.tvTypes.ItemsSource.Cast()); treeNodes.Add(txtNames); var paixu = treeNodes.OrderBy(x => x.Paixu).ToList(); if (paixu != null) { treeNodes.Clear(); foreach (var itemd in paixu) { treeNodes.Add(itemd); } return; } } if (item == null || txtParent)//判断是否是父节点 { return; } //当前对主Treeview二级菜单进行操作 白明雅 2018-12-28 //ObservableCollection itemsd = this.tvTypes.ItemsSource as ObservableCollection; ObservableCollection itemsd = IEnumerableToDicTreeNode(this.tvTypes.ItemsSource.Cast()); if (ParentTable != null && ParentTable.Rows.Count > 0) { foreach (var items in itemsd) { DataRow itemData = items.Data as DataRow; if (itemData == null || itemData["ID"].ToString() != ParentTable.Rows[0]["ID"].ToString()) { continue; } if (item.Nodes == null) { ObservableCollection Nodesd = new ObservableCollection(); Nodesd.Add(txtNames); items.Nodes = Nodesd; break; } else { items.Nodes.Add(txtNames); var paixus = items.Nodes.OrderBy(p => p.Paixu).ToArray(); if (paixus != null) { items.Nodes.Clear(); foreach (var itemd in paixus) { items.Nodes.Add(itemd); } } } } LoadTree(); } else { //当前对根目录(第一级)菜单进行操作 白明雅 2018-12-28 //ObservableCollection treeNodes = this.tvTypes.ItemsSource as ObservableCollection; ObservableCollection treeNodes = IEnumerableToDicTreeNode(this.tvTypes.ItemsSource.Cast()); treeNodes.Add(txtNames); treeNodes.OrderBy(x => x.Paixu).ToList(); ObservableCollection treeNo = new ObservableCollection(); var sortedOC = from items in treeNodes orderby items.Paixu select items; foreach (var i in sortedOC) { treeNo.Add(i); } this.tvTypes.ItemsSource = treeNo; } //修改原因:不需要将字典保存到工程文件中 修改人:高山 修改时间:2019.09.21 //SaveProjectDic(); } } catch (Exception ex) { MessageHelper.ShowError("添加节点异常:" + ex.Message); } } DicTreeNode txtNames = null; bool txtParent = false; //保存父节点信息 DataTable ParentTable = null; /// /// 增加父级节点更新方法 /// /// /// void action_Update(bool ParentName, DicTreeNode treeNodes, string fjdID) { IRDBHelper rdbHelper = null; ParentTable = null; try { if (fjdID == null) return; if (fjdID != "") { rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); if (rdbHelper == null) { throw new Exception("数据库连接打开失败:" + dbPath); } DataTable dtCat = rdbHelper.ExecuteDatatable("Sys_DicType", "select * from Sys_DicType where id=" + fjdID + " order by paixu", true); if (dtCat != null && dtCat.Rows.Count > 0) { ParentTable = dtCat; } } txtParent = ParentName; txtNames = treeNodes; } catch (Exception ex) { LogAPI.Debug(ex); } finally { if (rdbHelper != null) { rdbHelper.DisConnect(); } } } /// /// 由于SelectedItem转换DicTreeNode失败,加此方法,用于手动转换 /// /// 要转换的树节点 /// 转换后的DicTreeNode /// 白明雅 2018-12-27 private DicTreeNode GetDicTreeNodeByTreeNode(TreeNode tree) { if (tree == null) { return null; } IList treeNodes = tree.Nodes; ObservableCollection dicTreeNodes = new ObservableCollection(); if (treeNodes != null) { foreach (TreeNode item in treeNodes) { dicTreeNodes.Add(GetDicTreeNodeByTreeNode(item)); } } DicTreeNode node = new DicTreeNode() { Icon = tree.Icon, Data = tree.Data, Checked = tree.Checked, cMenu = tree.cMenu, Name = tree.Name, Nodes = dicTreeNodes, IsExpanded = tree.IsExpanded, IsOpenEdit = tree.IsOpenEdit, IsParent = tree.IsParent, Paixu = (int)tree.Paixu }; return node; } /// /// 根据TreeNode数组转化为DicTreeNode数组 /// /// /// /// 白明雅 2018-12-27 private DicTreeNode[] GetDicTreeNodeListByTreeNode(TreeNode[] tree) { DicTreeNode[] dicTrees = new DicTreeNode[tree.Length]; for (int i = 0; i < tree.Length; i++) { dicTrees[i] = GetDicTreeNodeByTreeNode(tree[i]); } return dicTrees; } /// /// ItemsSource转化ObservableCollection /// /// this.tvTypes.ItemsSource.Cast() /// ObservableCollection /// 白明雅 2018-12-27 private ObservableCollection IEnumerableToDicTreeNode(IEnumerable treeNodes) { //IEnumerable treeNodes = this.tvTypes.ItemsSource.Cast(); TreeNode treeNode = treeNodes.First() as TreeNode; DicTreeNode dicTree = GetDicTreeNodeByTreeNode(treeNode); ObservableCollection UpdateNode = new ObservableCollection(); UpdateNode.Add(dicTree); return UpdateNode; } //父节点编辑 private void btnEdit_Click(object sender, RoutedEventArgs e) { try { txtNames = null; //白明雅 2018-12-27 bug13997 TreeNode obj = this.tvTypes.SelectedItem as TreeNode; DicTreeNode item = GetDicTreeNodeByTreeNode(obj); //---------------------------- //父窗体中子节点修改 if (item == null || item.Data == null) { MessageHelper.ShowTips("请先选中需要编辑的节点!"); return; } DataDicEdit main = new DataDicEdit(0, true); main.Height = 410; main.Width = 550; main.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen; main.actionUpdate = action_Update; main.IsParent = item.IsParent; DataRow drv = item.Data as DataRow; main.InitPage(drv); bool temp = main.ShowInMainWindow(true).Value; //关闭窗体之后刷新tree控件 if (!temp) { if (txtNames == null) { return; } //白明雅 2018-12-27 bug13997 ObservableCollection UpdateNode = IEnumerableToDicTreeNode(this.tvTypes.ItemsSource.Cast()); //------------------------------------ //白明雅 2018-12-27 转换失败 换上面方法 //ObservableCollection UpdateNode = this.tvTypes.ItemsSource as ObservableCollection; if (item.IsParent) { int index; while ((index = UpdateNode.FindIndex(o => o == item)) >= 0) { UpdateNode[index].Name = txtNames.Name; UpdateNode[index].Data = txtNames.Data; UpdateNode[index].Paixu = txtNames.Paixu; DataRow drvS = UpdateNode[index].Data as DataRow; txtDicName.Text = drvS["Name"].ToString(); txtCode.Text = ""; txtAliasName.Text = drvS["ALIASNAME"].ToString(); txtRemark.Text = drvS["REMARK"].ToString(); var paixu = UpdateNode.OrderBy(x => x.Paixu).ToList(); if (paixu != null) { UpdateNode.Clear(); foreach (var itemd in paixu) { UpdateNode.Add(itemd); } // this.tvTypes.ItemsSource = treeNodes; } break; } } else { foreach (var items in UpdateNode) { DataRow drvs = items.Data as DataRow; if (drvs["ID"].ToString() == drv["TYPE"].ToString()) { items.Nodes.Remove(item); break; } } foreach (var items in UpdateNode) { DataRow updateTree = txtNames.Data as DataRow; DataRow drvs = items.Data as DataRow; if (drvs["ID"].ToString() == updateTree["TYPE"].ToString()) { if (items.Nodes == null) { ObservableCollection NewUpdateNode = new ObservableCollection(); NewUpdateNode.Add(txtNames); items.Nodes = NewUpdateNode; } else { items.Nodes.Add(txtNames); } var paixu = (items.Nodes).OrderBy(x => x.Paixu).ToList(); if (paixu != null) { items.Nodes.Clear(); foreach (var itemd in paixu) { items.Nodes.Add(itemd); } } break; } } } } //修改原因:不需要将字典保存到工程文件中 修改人:高山 修改时间:2019.09.21 //SaveProjectDic(); } catch (Exception ex) { MessageHelper.ShowError("父节点编辑异常,请重试:" + ex.Message); } } //父节点删除 private void btnDel_Click(object sender, RoutedEventArgs e) { IRDBHelper rdbHelper = null; try { //白明雅 2018-12-17 bug13997 TreeNode node = this.tvTypes.SelectedItem as TreeNode; DicTreeNode item = GetDicTreeNodeByTreeNode(node); //------------------ //DicTreeNode item = this.tvTypes.SelectedItem as DicTreeNode; if (item == null) { MessageHelper.ShowTips("请您选择要删除的节点!"); return; } if (MessageHelper.ShowYesNoAndWarning("您确认要删除【" + item.Name + "】节点!") == System.Windows.Forms.DialogResult.No) { return; } DataRow drv = item.Data as DataRow; if (drv == null) { return; } string pid = drv["id"].ToString(); rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); if (rdbHelper == null) { throw new Exception("数据库连接打开失败:" + dbPath); } string strSql = string.Empty; if (item.IsParent) { string sIDS = string.Empty; int res = -1; DataTable dtDic = rdbHelper.ExecuteDatatable("Sys_DicManage", string.Format("select * from Sys_DicManage where TYPE={0} ", pid), false); foreach (DataRow dritem in dtDic.Rows) { sIDS += string.Format("'{0}',", dritem["ID"]); } if (!string.IsNullOrEmpty(sIDS)) { //首先删除子项 strSql = "delete from Sys_DicDetail where OWNERDIC in (" + sIDS.TrimEnd(',') + ")"; res = rdbHelper.ExecuteNonQuery(strSql, CommandType.Text); if (res < 0) { MessageHelper.ShowError("删除子项出错,请联系技术人员!"); return; } //删除子项 strSql = string.Format("delete from Sys_DicManage where TYPE={0} ", pid); res = rdbHelper.ExecuteNonQuery(strSql, CommandType.Text); if (res < 0) { MessageHelper.ShowError("删除子项出错,请联系技术人员!"); return; } } //然后删除本身 strSql = string.Format("delete from Sys_DicType where ID={0} ", pid); res = rdbHelper.ExecuteNonQuery(strSql, CommandType.Text); //白明雅 2018-12-27 bug13997 手动转换ObservableCollection ObservableCollection UpdateNode = IEnumerableToDicTreeNode(this.tvTypes.ItemsSource.Cast()); if (res > 0) { this.txtDicName.Text = ""; this.txtAliasName.Text = ""; this.txtCode.Text = ""; this.txtParentName.Text = ""; Thread.Sleep(700); ObservableCollection items = UpdateNode; items.Remove(item); // loadTree(); this.tvDicDetail.ItemsSource = null; } //----------------------------------- #region 白明雅 2018-12-27 原来方法 //if (res > 0) //{ // this.txtDicName.Text = ""; // this.txtAliasName.Text = ""; // this.txtCode.Text = ""; // this.txtParentName.Text = ""; // Thread.Sleep(700); // ObservableCollection items = this.tvTypes.ItemsSource as ObservableCollection; // items.Remove(item); // // loadTree(); // this.tvDicDetail.ItemsSource = null; //} #endregion } else { //首先删除子项 strSql = "delete from Sys_DicDetail where OWNERDIC='" + pid + "'"; int res = rdbHelper.ExecuteNonQuery(strSql, CommandType.Text); if (res < 0) { MessageHelper.ShowError("删除子项出错,请联系技术人员!"); return; } //然后删除本身 strSql = "delete from Sys_DicManage where id=" + pid; res = rdbHelper.ExecuteNonQuery(strSql, CommandType.Text); if (res > 0) { this.txtDicName.Text = ""; this.txtAliasName.Text = ""; this.txtCode.Text = ""; this.txtParentName.Text = ""; //白明雅 2018-12-28 bug13997 //ObservableCollection items = this.tvTypes.ItemsSource as ObservableCollection; ObservableCollection items = IEnumerableToDicTreeNode(this.tvTypes.ItemsSource.Cast()); DataRow DataView = item.Data as DataRow; foreach (var Treeitem in items) { DataRow DataRow = Treeitem.Data as DataRow; if (DataRow["ID"].ToString() == DataView["TYPE"].ToString()) { Treeitem.Nodes.Remove(item); break; } } Thread.Sleep(700); this.tvDicDetail.ItemsSource = null; } } //修改原因:不需要将字典保存到工程文件中 修改人:高山 修改时间:2019.09.21 //SaveProjectDic(); } catch (Exception ex) { LogAPI.Debug(ex); MessageHelper.ShowTips("数据加载异常!" + ex.Message); } finally { if (rdbHelper != null) { rdbHelper.DisConnect(); } LoadTree(); } } private void ActionChe(bool Parent, DicTreeNode treeNods, string Str) { try { if (Str != "") { Cold = Str; txtNames = treeNods; } else { txtNames = treeNods; } } catch (Exception ex) { LogAPI.Debug(ex); throw; } } //字典子项新增 private void btnDetailAdd_Click(object sender, RoutedEventArgs e) { try { Cold = null; txtNames = null; //获取选中节点 //白明雅 2018-12-27 bug13997 TreeNode node = this.tvTypes.SelectedItem as TreeNode; DicTreeNode item = GetDicTreeNodeByTreeNode(node); //------------------------ //DicTreeNode item = this.tvTypes.SelectedItem as DicTreeNode; if (item == null || item.Data == null) { MessageHelper.ShowTips("请先选择正确的父节点!"); return; } //详细字典值 DicTreeNode DetailItem = this.tvDicDetail.SelectedItem as DicTreeNode; DicTreeNode TvTypesItem = GetDicTreeNodeByTreeNode(this.tvTypes.SelectedItem as TreeNode); // this.tvTypes.SelectedItem as DicTreeNode; DataRow drv = item.Data as DataRow; DataDicDetailEdit main = new DataDicDetailEdit(TvTypesItem.Name); main.ActionChecked = ActionChe; main.Width = 500; main.Height = 350; main.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen; if (DetailItem != null && DetailItem.Data != null && !DetailItem.IsParent) { main.DrvNode = DetailItem.Data as DataRow; } main.OWNERDIC = drv["ID"].ToString(); //关闭窗体之后刷新tree控件 if (!main.ShowInMainWindow(true).Value) { if (txtNames == null) return; if (Cold == null) { ObservableCollection itemTree = this.tvDicDetail.ItemsSource as ObservableCollection; DicTreeNode itemsd = itemTree[0]; if (itemsd.Nodes == null) { ObservableCollection ergod = new ObservableCollection(); ergod.Add(txtNames); itemsd.Nodes = ergod; } else { itemsd.Nodes.Add(txtNames); var paixu = (itemsd.Nodes).OrderBy(x => x.Paixu).ToList(); if (paixu != null) { itemsd.Nodes.Clear(); foreach (var itemd in paixu) { itemsd.Nodes.Add(itemd); } } } } else { ObservableCollection itemTree = this.tvDicDetail.ItemsSource as ObservableCollection; ObservableCollection list = itemTree[0].Nodes as ObservableCollection; foreach (var itemsd in list) { DataRow DataRowSubnode = itemsd.Data as DataRow;//保存当前Treevie对象遍历后的节点 DataRow Datarows = txtNames.Data as DataRow;//保存新增节点 if (DataRowSubnode["ID"].ToString() == Cold) { if (itemsd.Nodes == null) { ObservableCollection ergod = new ObservableCollection(); ergod.Add(txtNames); itemsd.Nodes = ergod; } else { itemsd.Nodes.Add(txtNames); var paixu = (itemsd.Nodes).OrderBy(x => x.Paixu).ToList(); if (paixu != null) { itemsd.Nodes.Clear(); foreach (var itemd in paixu) { itemsd.Nodes.Add(itemd); } } } } else if (itemsd.Nodes != null && itemsd.Nodes.Count > 0) { ergodicSubnode(itemsd.Nodes, Cold); } } } //修改原因:不需要将字典保存到工程文件中 修改人:高山 修改时间:2019.09.21 //SaveProjectDic(); } } catch (Exception ex) { MessageHelper.ShowError("新增节点异常!" + ex.Message); } } /// /// 遍历子节点增加节点 /// private void ergodicSubnode(ObservableCollection ergodic, string Pid) { foreach (var item in ergodic) { DataRow DataRowSubnode = item.Data as DataRow;//保存当前Treevie对象遍历后的节点 if (DataRowSubnode["ID"].ToString() == Pid) { if (item.Nodes == null) { ObservableCollection ergod = new ObservableCollection(); ergod.Add(txtNames); item.Nodes = (ergod); } else { item.Nodes.Add(txtNames); var paixu = (item.Nodes).OrderBy(x => x.Paixu).ToList(); if (paixu != null) { item.Nodes.Clear(); foreach (var itemd in paixu) { item.Nodes.Add(itemd); } } } return; } else { if (item.Nodes != null && item.Nodes.Count > 0) { ergodicSubnode(item.Nodes, Pid); } } } } /// /// 遍历子节点删除数据 /// /// /// private void ergodicSubnodeDelete(ObservableCollection ergodic, DicTreeNode itemud, string Pid) { foreach (var item in ergodic) { DataRow DataRowSubnode = item.Data as DataRow;//保存当前Treevie对象遍历后的节点 if (DataRowSubnode["ID"].ToString() == Pid) { if (item.Nodes != null) { item.Nodes.Remove(itemud); var paixu = (item.Nodes).OrderBy(x => x.Paixu).ToList(); if (paixu != null) { item.Nodes.Clear(); foreach (var itemd in paixu) { item.Nodes.Add(itemd); } } } return; } else { if (item.Nodes != null && item.Nodes.Count > 0) { ergodicSubnodeDelete(item.Nodes, itemud, Pid); } } } } public List sQSCodeList; public List sQSNameList; public bool GetExcelAllRecord(Workbook the_workbook) { try { sQSCodeList = new List(); sQSNameList = new List(); bool exitload = false; var rowindex = 1; var worksheet = the_workbook.Worksheets[0]; while (!exitload) { if (string.IsNullOrWhiteSpace(worksheet.Rows[rowindex][0].DisplayText)) { if (rowindex < 5) { rowindex++; continue; } exitload = true; break; } if (rowindex == 1) { if (worksheet.Rows[rowindex][0].DisplayText != "权属单位代码" || worksheet.Rows[rowindex][1].DisplayText != "权属单位名称") { MessageHelper.ShowError("文件内容解析错误,请选择正确格式内容的权属样式文件!"); exitload = true; return false; } } if (rowindex > 1) { sQSCodeList.Add(worksheet.Rows[rowindex][0].Value.ToString()); sQSNameList.Add(worksheet.Rows[rowindex][1].DisplayText); } rowindex++; } return true; } catch (Exception ex) { LogAPI.Debug("获取权属信息异常: " + ex + " ; "); sQSCodeList = new List(); sQSNameList = new List(); return false; } } public bool JudgeExistQDCode(string sQSCode) { try { if (string.IsNullOrWhiteSpace(sQSCode) == true) { return false; } if (sQSCodeList == null || sQSCodeList.Count() <= 0) { return false; } bool bJudge_ = false; for (int i = 0; i < sQSCodeList.Count; i++) { if (sQSCodeList[i] == sQSCode) { bJudge_ = true; break; } else { continue; } } return bJudge_; } catch (Exception ex) { LogAPI.Debug("验证是否存在权属代码( " + sQSCode + " ) 时异常: " + ex + " ; "); return false; } } /// /// 字典子项编辑 /// /// /// private void btnDetailEdit_Click(object sender, RoutedEventArgs e) { try { txtNames = null; Cold = null; //判断子项是否有选中值 DicTreeNode item = this.tvDicDetail.SelectedItem as DicTreeNode; if (item == null || item.Data == null) { MessageHelper.ShowTips("请先选中需要编辑的节点!"); return; } DataRow drv = item.Data as DataRow; if (drv == null) { return; } if (!drv.Table.Columns.Contains("OWNERDIC")) { DataDicEdit DataMain = new DataDicEdit(1); DataMain.Width = 550; DataMain.Height = 410; DataMain.actionUpdate = action_Update; DataMain.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen; DataMain.IsParent = item.IsParent; DataMain.InitPage(drv); //关闭窗体之后刷新tree控件 if (!DataMain.ShowInMainWindow(true).Value) { if (txtNames == null && Cold == null) { return; } ObservableCollection ListTree = tvDicDetail.ItemsSource as ObservableCollection; DicTreeNode TreesNode = ListTree[0]; TreesNode.Name = txtNames.Name; TreesNode.Data = txtNames.Data; DataRow treesData = TreesNode.Data as DataRow; txtDicName.Text = treesData["Name"].ToString(); txtCode.Text = ""; txtAliasName.Text = treesData["ALIASNAME"].ToString(); txtRemark.Text = treesData["REMARK"].ToString(); //白明雅 2018-12-28 DicTreeNode TreesNodes = GetDicTreeNodeByTreeNode(tvTypes.SelectedItem as TreeNode); TreesNodes.Name = txtNames.Name; TreesNodes.Data = txtNames.Data; TreesNodes.Paixu = Convert.ToInt32(treesData["PAIXU"]); } } else { DataDicDetailEdit main = new DataDicDetailEdit(txtParentName.Text); main.Width = 500; main.Height = 350; main.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen; main.OWNERDIC = drv["OWNERDIC"].ToString(); main.ActionChecked = ActionChe; main.InitPage(drv); //关闭窗体之后刷新tree控件 if (!main.ShowInMainWindow(true).Value) { if (txtNames == null && Cold == null) { return; } if (Cold == null) { ObservableCollection items = this.tvDicDetail.ItemsSource as ObservableCollection; DicTreeNode treeNodes = items[0] as DicTreeNode;//当前目录中根目录节点 if (string.IsNullOrWhiteSpace(drv["PID"].ToString().Trim())) { DataRow treeNodeData = treeNodes.Data as DataRow;//将根目录节点转成DataRow DataRow treeView = txtNames.Data as DataRow; foreach (var itemData in treeNodes.Nodes) { DataRow temData = itemData.Data as DataRow;//当前第一次子目录对象 if (temData["OWNERDIC"].ToString() == treeNodeData["ID"].ToString() && drv["ID"].ToString().Trim() == temData["ID"].ToString().Trim()) { DataRow temDatas = itemData.Data as DataRow; itemData.Name = txtNames.Name; itemData.Paixu = txtNames.Paixu; itemData.Data = txtNames.Data; txtDicName.Text = temDatas["Name"].ToString(); txtCode.Text = temDatas["CODE"].ToString(); txtAliasName.Text = ""; txtRemark.Text = temDatas["REMARK"].ToString(); var paixu = treeNodes.Nodes.OrderBy(x => x.Paixu).ToList(); if (paixu != null) { treeNodes.Nodes.Clear(); foreach (var itemd in paixu) { treeNodes.Nodes.Add(itemd); } } break; } } } } else { ObservableCollection items = this.tvDicDetail.ItemsSource as ObservableCollection; DicTreeNode treeNodes = items[0] as DicTreeNode;//当前目录中根目录节点 if (string.IsNullOrWhiteSpace(drv["PID"].ToString().Trim())) { DataRow treeNodeData = treeNodes.Data as DataRow;//将根目录节点转成DataRow treeNodes.Nodes.Remove(item); items = this.tvDicDetail.ItemsSource as ObservableCollection; treeNodes = items[0] as DicTreeNode; DataRow treeView = txtNames.Data as DataRow; foreach (var itemData in treeNodes.Nodes) { DataRow temData = itemData.Data as DataRow;//当前第一次子目录对象 if (temData["ID"].ToString() == Cold) { if (itemData.Nodes != null) { itemData.Nodes.Add(txtNames); } else { ObservableCollection itemsList = new ObservableCollection(); itemsList.Add(txtNames); itemData.Nodes = itemsList; } break; } } } else { foreach (var itemNodes in treeNodes.Nodes) { DataRow temData = itemNodes.Data as DataRow;//当前第一次子目录对象 if (temData["ID"].ToString() == drv["ID"].ToString()) { itemNodes.Name = txtNames.Name; itemNodes.Data = txtNames.Data; itemNodes.Paixu = txtNames.Paixu; DataRow temDatas = itemNodes.Data as DataRow; txtDicName.Text = temDatas["Name"].ToString(); txtCode.Text = ""; txtAliasName.Text = temDatas["CODE"].ToString(); txtRemark.Text = temDatas["REMARK"].ToString(); var paixu = treeNodes.Nodes.OrderBy(x => x.Paixu).ToList(); if (paixu != null) { treeNodes.Nodes.Clear(); foreach (var itemd in paixu) { treeNodes.Nodes.Add(itemd); } } break; } else if (itemNodes.Nodes != null && itemNodes.Nodes.Count > 0) { updateDicTree(itemNodes, drv["ID"].ToString()); } } } } } } //修改原因:不需要将字典保存到工程文件中 修改人:高山 修改时间:2019.09.21 //SaveProjectDic(); } catch (Exception ex) { MessageHelper.ShowError("数据加载异常!" + ex.Message); LogAPI.Debug(ex); } } private void updateDicTree(DicTreeNode tree, string UpdatID) { foreach (var item in tree.Nodes) { DataRow temData = item.Data as DataRow;//当前第一次子目录对象 if (temData["ID"].ToString() == UpdatID) { item.Name = txtNames.Name; item.Data = txtNames.Data; item.Paixu = txtNames.Paixu; DataRow temDatas = item.Data as DataRow; txtDicName.Text = temDatas["Name"].ToString(); txtCode.Text = ""; txtAliasName.Text = temDatas["CODE"].ToString(); txtRemark.Text = temDatas["REMARK"].ToString(); var paixu = tree.Nodes.OrderBy(x => x.Paixu).ToList(); if (paixu != null) { tree.Nodes.Clear(); foreach (var itemd in paixu) { tree.Nodes.Add(itemd); } } break; } else if (item.Nodes != null && item.Nodes.Count > 0) { updateDicTree(item, UpdatID); } } } //字典子项删除 private void btnDetailDel_Click(object sender, RoutedEventArgs e) { IRDBHelper rdbHelper = null; try { //删除子项需要级联删除下属的所有子项 DicTreeNode item = this.tvDicDetail.SelectedItem as DicTreeNode; if (item == null) { MessageHelper.ShowTips("请您选择要删除的节点!"); return; } if (MessageHelper.ShowYesNoAndWarning("您确认要删除【" + item.Name + "】节点?") == System.Windows.Forms.DialogResult.No) { return; } DataRow drv = item.Data as DataRow; if (drv == null) { if (item.Nodes.Count > 0) { MessageHelper.ShowWarning("您选择的是根节点,如果想删除请在根目录下删除"); } return; } string pid = drv["id"].ToString(); rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); if (rdbHelper == null) { throw new Exception("数据库连接打开失败:" + dbPath); } string strSql = string.Empty; //判断是否根节点删除 if (item.IsParent) { //首先删除子项 strSql = "delete from Sys_DicDetail where OWNERDIC='" + pid + "'"; int res = rdbHelper.ExecuteNonQuery(strSql, CommandType.Text); if (res < 0) { MessageHelper.ShowError("删除子项出错,请联系技术人员!"); return; } //然后删除本身 strSql = "delete from Sys_DicManage where id=" + pid; res = rdbHelper.ExecuteNonQuery(strSql, CommandType.Text); if (res > 0) { Thread.Sleep(1000); this.txtDicName.Text = ""; this.txtAliasName.Text = ""; this.txtCode.Text = ""; this.txtParentName.Text = ""; //ObservableCollection itemTree = this.tvTypes.ItemsSource as ObservableCollection; //item = this.tvTypes.SelectedItem as DicTreeNode; //白明雅 2018-12-28 ObservableCollection itemTree = IEnumerableToDicTreeNode(this.tvTypes.ItemsSource.Cast()); item = GetDicTreeNodeByTreeNode(this.tvTypes.SelectedItem as TreeNode); if (item != null) { foreach (var items in itemTree) { DataRow drvs = items.Data as DataRow; if (drvs["ID"].ToString() == drv["TYPE"].ToString()) { items.Nodes.Remove(item); break; } else { } } } this.tvDicDetail.ItemsSource = null; LoadTree();//白明雅 2018-12-28 } } else { string ids = ForeachGetID(pid, rdbHelper) + pid; //执行删除操作 strSql = "delete from Sys_DicDetail where id in (" + ids + ")"; int res = rdbHelper.ExecuteNonQuery(strSql, CommandType.Text); if (res > 0) { this.txtDicName.Text = ""; this.txtAliasName.Text = ""; this.txtCode.Text = ""; this.txtParentName.Text = ""; ObservableCollection itemTree = this.tvDicDetail.ItemsSource as ObservableCollection; DicTreeNode drvs = itemTree[0] as DicTreeNode; if (drvs != null) { DataRow drvsds = drvs.Data as DataRow; if (drvsds != null) { if (string.IsNullOrWhiteSpace(drv["PID"].ToString())) { drvs.Nodes.Remove(item); } else { foreach (var items in drvs.Nodes) { DataRow drvsd = items.Data as DataRow; if (drvsd["ID"].ToString() == drv["PID"].ToString()) { items.Nodes.Remove(item); break; } else if (items.Nodes != null && items.Nodes.Count > 0) { ergodicSubnodeDelete(items.Nodes, item, drv["PID"].ToString()); } } } } } } Thread.Sleep(1000); } //SaveProjectDic(); } catch (Exception ex) { MessageHelper.ShowError("数据加载异常!" + ex.Message); LogAPI.Debug(ex); } finally { if (rdbHelper != null) { rdbHelper.DisConnect(); } } } //递归获取ID,一直到根节点 private string ForeachGetID(string ID, IRDBHelper rdbHelper) { string ids = string.Empty; DataTable dt = rdbHelper.ExecuteDatatable("Sys_DicDetail", string.Format("select * from Sys_DicDetail where PID='{0}'", ID), true); if (dt != null && dt.Rows.Count > 0) { foreach (DataRow item in dt.Rows) { string id = item["ID"].ToString(); ids += id + "," + ForeachGetID(id, rdbHelper); } return ids; } else { return ""; } } /// /// 代码及名称树状菜单点击事件 /// /// /// private void tvDicDetail_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs e) { DicTreeNode item = this.tvDicDetail.SelectedItem as DicTreeNode; SetChangedItem(item); } private void SetChangedItem(DicTreeNode item) { IRDBHelper rdbHelper = null; try { txtDicName.Text = string.Empty; txtCode.Text = string.Empty; txtRemark.Text = string.Empty; txtDicID.Text = string.Empty; txtAliasName.Text = string.Empty; txtParentName.Text = string.Empty; if (item == null || item.Data == null || (item.Data as DataRow) == null) { return; } rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + dbPath, DatabaseType.SQLite); if (rdbHelper == null) { throw new Exception("数据库连接打开失败:" + dbPath); } DataRow drv = item.Data as DataRow; txtDicName.Text = drv["Name"] == null ? "" : drv["Name"].ToString(); if (drv.Table.Columns.Contains("CODE")) { txtCode.Text = drv["CODE"] == null ? "" : drv["CODE"].ToString(); } txtDicID.Text = drv["ID"] == null ? "" : drv["ID"].ToString(); txtRemark.Text = drv["REMARK"] == null ? "" : drv["REMARK"].ToString(); #region 获取父级名称,代码 string QuerySQL = string.Empty; if (item.IsParent) { txtAliasName.Text = drv["ALIASNAME"] == null ? "" : drv["ALIASNAME"].ToString(); if (drv.Table.Columns.Contains("TYPE") && drv["TYPE"] != null && !string.IsNullOrWhiteSpace(drv["TYPE"].ToString())) { QuerySQL = "SELECT * FROM Sys_DicType WHERE ID= " + drv["TYPE"].ToString(); } } else { if (drv.Table.Columns.Contains("PID") && drv["PID"] != null && !string.IsNullOrWhiteSpace(drv["PID"].ToString())) { QuerySQL = "SELECT * FROM Sys_DicDetail WHERE ID = " + drv["PID"].ToString(); } else if (drv.Table.Columns.Contains("OWNERDIC") && drv["OWNERDIC"] != null && !string.IsNullOrWhiteSpace(drv["OWNERDIC"].ToString())) { QuerySQL = "SELECT * FROM Sys_DicManage WHERE ID = " + drv["OWNERDIC"].ToString(); } } if (string.IsNullOrWhiteSpace(QuerySQL)) { return; } DataTable dtDict = rdbHelper.ExecuteDatatable("Sys_DicType", QuerySQL, false); if (dtDict != null && dtDict.Rows.Count > 0) { string parentName = "["; if (dtDict.Columns.Contains("CODE")) { parentName += dtDict.Rows[0]["CODE"] == null ? "" : dtDict.Rows[0]["CODE"].ToString(); } else if (dtDict.Columns.Contains("ID")) { parentName += dtDict.Rows[0]["ID"] == null ? "" : dtDict.Rows[0]["ID"].ToString(); } parentName += "]"; if (dtDict.Columns.Contains("NAME")) { parentName += dtDict.Rows[0]["NAME"] == null ? "" : dtDict.Rows[0]["NAME"].ToString(); } txtParentName.Text = parentName; } #endregion } catch (Exception ex) { MessageHelper.ShowError("数据加载异常!" + ex.Message); LogAPI.Debug(ex); } finally { if (rdbHelper != null) { rdbHelper.DisConnect(); } } } /// /// 保存字典 /// private void SaveProjectDic() { try { string dicPaht = (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).GetDicDataPath(); if (!string.IsNullOrWhiteSpace(dicPaht)) { string tempPath = System.IO.Path.GetTempPath(); string dbPath = System.IO.Path.Combine(tempPath, "dic.back"); File.Copy(dicPaht, dbPath); FileInfo dicfileInfo = new FileInfo(dbPath); using (System.IO.FileStream dicStream = dicfileInfo.Open(FileMode.Open, FileAccess.Read, FileShare.None)) { byte[] dicByte = new byte[dicStream.Length]; dicStream.Read(dicByte, 0, dicByte.Length); dicStream.Close(); File.Delete(dbPath); string base64 = Convert.ToBase64String(dicByte); (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).DicData = base64; } //(MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).Save(); Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { MsgType = "SaveProject" }); } } catch (Exception ex) { LogAPI.Debug("保存字典失败:" + ex.Message); throw new Exception("保存字典失败:" + ex.Message); } } /// /// 字典导入 /// /// /// private void btnDicImport_Click(object sender, RoutedEventArgs e) { try { FrmDicManageImport frm = new FrmDicManageImport { WindowStartupLocation = WindowStartupLocation.CenterScreen }; frm.ShowInMainWindow(true); } catch (Exception ex) { LogAPI.Debug(ex); MessageHelper.ShowError("字典导入出现错误,可能的原因是:" + ex.Message); } } /// /// 字典导出 /// /// /// private void btnDicExport_Click(object sender, RoutedEventArgs e) { try { FrmDicManageExport frm = new FrmDicManageExport { WindowStartupLocation = WindowStartupLocation.CenterScreen }; frm.ShowInMainWindow(true); } catch (Exception ex) { LogAPI.Debug(ex); MessageHelper.ShowError("字典导出出现错误,可能的原因是:" + ex.Message); } } /// /// 生成权属字典 /// /// /// private void btnCreateDicNew_Click(object sender, RoutedEventArgs e) { try { KBGNewDataManage main = new KBGNewDataManage(); main.Refresh = LoadTree; main.Width = 700; main.Height = 420; main.WindowStartupLocation = WindowStartupLocation.CenterScreen; main.ShowInMainWindow(false); } catch (Exception ex) { LogAPI.Debug(ex); MessageHelper.ShowError("生成权属代码字典出现错误,可能的原因是:" + ex.Message); } } private void BaseWindow_Closed(object sender, EventArgs e) { /* * 根据国家标准库做出调整,删除ZJLX表 * 白明雅 2019-01-28 注释下列代码 * KGIS.Common.Utility.DicAPI.GetDicTypeID(KGIS.Common.Enum.DicTypeEnum.ZJLX, true); */ //重新获取字典 GetAllDic(); } private List GetAllDic() { DataTable dt = null; List result = new List(); IRDBHelper rdbHelper = null; try { string dbPath = (MapsManager.Instance.MapService.GetProjectInfo() 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 = TBToList.ToList(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 void tvTypes_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e) { var treeViewItem = VisualUpwardSearch(e.OriginalSource as DependencyObject) as TreeViewItem; if (treeViewItem != null) { treeViewItem.Focus(); e.Handled = true; } } static DependencyObject VisualUpwardSearch(DependencyObject source) { while (source != null && source.GetType() != typeof(T)) source = VisualTreeHelper.GetParent(source); return source; } public TreeNode QSXZchildNodeItem { get; set; } public void ImportExcel(string excelfileurl) { try { if (FileIsUsed(excelfileurl)) { MessageHelper.ShowWarning("文件被占用,请关闭占用文件的相关程序,或者选择其他文件!"); return; } IRDBHelper rdbHelper = null; string Path = System.IO.Path.GetDirectoryName((MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).GetProjFilePath()) + @"\BGTJ.sqlite"; rdbHelper = RDBFactory.CreateDbHelper("Data Source=" + Path, DatabaseType.SQLite); if (rdbHelper == null) { throw new Exception("打开数据库连接失败!"); } DataTable dtDict = rdbHelper.ExecuteDatatable("Sys_DicType", "select * from Sys_DicManage where NAME='权属代码'", true); //数据库已存在 if (dtDict != null && dtDict.Rows.Count > 0) { QsdmID = dtDict.Rows[0]["ID"].ToString(); DataTable dtDetail = rdbHelper.ExecuteDatatable("Sys_DicDetail", "select * from Sys_DicDetail where OWNERDIC='" + QsdmID + "'", true); if (dtDetail == null || dtDetail.Rows.Count == 0 || MessageHelper.ShowYesNoAndTips("确定要导入吗?导入将覆盖现有字典数据!") == System.Windows.Forms.DialogResult.Yes) { ListQsdwEntity.Clear(); RemoveQsdwEntity.Clear(); ExcelLists.Clear(); Workbook workbook = new Workbook(); using (FileStream stream = new FileStream(excelfileurl, FileMode.Open)) { workbook.LoadDocument(stream, DocumentFormat.OpenXml);//打开exe表格 } bool exitload = false; var rowindex = 1; var worksheet = workbook.Worksheets[0]; //文件解析失败,直接退出 if (!GetExcelAllRecord(workbook)) return; if (sQSCodeList == null || sQSCodeList.Count <= 0 || sQSNameList == null || sQSNameList.Count <= 0) { MessageHelper.ShowWarning("信息获取异常!"); return; } while (!exitload) { if (string.IsNullOrWhiteSpace(worksheet.Rows[rowindex][0].DisplayText)) { if (rowindex < 5) { rowindex++; continue; } exitload = true; break; } if (rowindex > 1) { QSDWinformation QsdwEntity = new QSDWinformation(); //模板-权属代码需是12位 if (worksheet.Rows[rowindex][0].Value.ToString().PadRight(12, '0').IndexOf("0000000000") == 2) { QsdwEntity.Qsdwdm = worksheet.Rows[rowindex][0].Value.ToString().Substring(0, 2);//省 } else if (worksheet.Rows[rowindex][0].Value.ToString().PadRight(12, '0').IndexOf("00000000") == 4) { QsdwEntity.Qsdwdm = worksheet.Rows[rowindex][0].Value.ToString().Substring(0, 4);//市 } else if (worksheet.Rows[rowindex][0].Value.ToString().PadRight(12, '0').IndexOf("000000") == 6 && worksheet.Rows[rowindex][0].Value.ToString().Length <= 6) { QsdwEntity.Qsdwdm = worksheet.Rows[rowindex][0].Value.ToString().Substring(0, 6);//区 } else if (worksheet.Rows[rowindex][0].Value.ToString().Length == 9 && worksheet.Rows[rowindex][0].Value.ToString().EndsWith("000"))//特殊情况 { QsdwEntity.Qsdwdm = worksheet.Rows[rowindex][0].Value.ToString().PadRight(19, '0'); QsdwEntity.Qsdwmc = worksheet.Rows[rowindex][1].DisplayText; QsdwEntity.ZLDWDM = QsdwEntity.Qsdwdm; QsdwEntity.Zldwmc = QsdwEntity.Qsdwmc; QsdwEntity.HasCheck = true; ListQsdwEntity.Add(QsdwEntity); ExcelLists = new List(ListQsdwEntity); rowindex++; continue; } else { QsdwEntity.Qsdwdm = worksheet.Rows[rowindex][0].Value.ToString();//村 } //QsdwEntity.Qsdwdm = worksheet.Rows[rowindex][0].Value.ToString(); if (QsdwEntity.Qsdwdm.Length == 19) { if (QsdwEntity.Qsdwdm.EndsWith("00000000000000000")) { QsdwEntity.Qsdwdm = QsdwEntity.Qsdwdm.Substring(0, 2); } else if (QsdwEntity.Qsdwdm.EndsWith("000000000000000")) { QsdwEntity.Qsdwdm = QsdwEntity.Qsdwdm.Substring(0, 4); } else if (QsdwEntity.Qsdwdm.EndsWith("0000000000000")) { //判断是否存在配套的上一级(9位村/街道)数据 //有:不处理,原版数据 //没有:在判断是否所有的数据中是否存在6位本记录外同6位编码的县级; // 有:不处理,成为飞入地; // 没有:截取成6位; string sTemp_1 = QsdwEntity.Qsdwdm; if (JudgeExistQDCode(sTemp_1.Substring(0, 6) + "000") == true) { QsdwEntity.Qsdwdm = sTemp_1; } else { if (JudgeExistQDCode(sTemp_1.Substring(0, 6)) == true) { QsdwEntity.Qsdwdm = sTemp_1; } else { QsdwEntity.Qsdwdm = sTemp_1.Substring(0, 6); } } } else if (QsdwEntity.Qsdwdm.EndsWith("0000000000")) { QsdwEntity.Qsdwdm = QsdwEntity.Qsdwdm.Substring(0, 9); } } QsdwEntity.Qsdwmc = worksheet.Rows[rowindex][1].DisplayText; QsdwEntity.ZLDWDM = QsdwEntity.Qsdwdm; QsdwEntity.Zldwmc = QsdwEntity.Qsdwmc; QsdwEntity.HasCheck = true; ListQsdwEntity.Add(QsdwEntity); ExcelLists = new List(ListQsdwEntity); } rowindex++; } if (ListQsdwEntity.Count > 0) { ///获取省市县信息 var shengcode = ListQsdwEntity.Where(x => x.ZLDWDM.Length == 2).FirstOrDefault(); ShengInfo = new KeyValuePair(shengcode == null ? ListQsdwEntity.First().ZLDWDM.PadRight(12, '0').Substring(0, 2).ToString() : shengcode.ZLDWDM, shengcode == null ? "省" : shengcode.Zldwmc); ShengInfo2 = ListQsdwEntity.Where(x => x.ZLDWDM.Length == 2).ToList();//插入循环的数据 var shicode = ListQsdwEntity.Where(x => x.ZLDWDM.Length == 4).FirstOrDefault(); ShiInfo = new KeyValuePair(shicode == null ? ListQsdwEntity.First().ZLDWDM.PadRight(12, '0').Substring(0, 4).ToString() : shicode.ZLDWDM, shicode == null ? "市" : shicode.Zldwmc); ShiInfo2 = ListQsdwEntity.Where(x => x.ZLDWDM.Length == 4).ToList(); var xiancode = ListQsdwEntity.Where(x => x.ZLDWDM.Length == 6).FirstOrDefault(); XianInfo = new KeyValuePair(xiancode == null ? ListQsdwEntity.First().ZLDWDM.PadRight(12, '0').Substring(0, 6).ToString() : xiancode.ZLDWDM, xiancode == null ? "县" : xiancode.Zldwmc); XianInfo2 = ListQsdwEntity.Where(x => x.ZLDWDM.Length == 6).ToList(); #region 2020.04.01 飞入地与县同级显示 var XianInfolist = ListQsdwEntity.Where(x => x.ZLDWDM.Length == 19).GroupBy(x => x.ZLDWDM.PadRight(12, '0').Substring(0, 6)).Select(x => x.Key).ToList(); List Xianlist = new List(); string sTemp_ = ""; if (XianInfo2 != null && XianInfo2.Count() > 0) { foreach (var tt in XianInfo2) { sTemp_ += tt.ZLDWDM + ","; } } if (string.IsNullOrWhiteSpace(sTemp_) == false) { sTemp_ = sTemp_.TrimStart(',').TrimEnd(','); sTemp_ = "," + sTemp_ + ","; foreach (var xian in XianInfolist) { if (sTemp_.Contains(xian) == true) { continue; } else { if (ListQsdwEntity != null && ListQsdwEntity.Count() > 0) { for (int u = 0; u < ListQsdwEntity.Count(); u++) { if (ListQsdwEntity[u].ZLDWDM.Length > 6 && ListQsdwEntity[u].ZLDWDM.PadRight(12, '0').Substring(0, 6) == xian) { Xianlist.Add(ListQsdwEntity[u]); } else { continue; } } } } } } else { foreach (var xian in XianInfolist) { var xianinfo = ListQsdwEntity.Where( x => { bool bresult = false; if (x.ZLDWDM.Length > 6 && x.ZLDWDM.PadRight(12, '0').Substring(0, 6) == xian) { bresult = true; } if (x.ZLDWDM == XianInfo.Key) { bresult = true; } return bresult; }).FirstOrDefault(); Xianlist.Add(xianinfo); } } //XianInfo2 = Xianlist; //2020-7-15 List XianInfo2_ = new List(); if (XianInfo2 == null || XianInfo2.Count() <= 0) { XianInfo2 = Xianlist; } else { if (Xianlist != null && Xianlist.Count() > 0) { bool bIsExistMark = false; for (int i = 0; i < Xianlist.Count(); i++) { bIsExistMark = false; for (int j = 0; j < XianInfo2.Count(); j++) { if (XianInfo2[j].ZLDWDM == Xianlist[i].ZLDWDM) { bIsExistMark = true; break; } else { continue; } } if (bIsExistMark == true) { continue; } else { XianInfo2_.Add(Xianlist[i]); } } } if (XianInfo2_ != null && XianInfo2_.Count() > 0) { for (int k = 0; k < XianInfo2_.Count(); k++) { XianInfo2.Add(XianInfo2_[k]); } } } #endregion Run(); OrderBy(XianInfo.Key, XianInfo.Value); CheckExist(QSXZchildNodeItem);//childNodeItem左项子级目录 } } } } catch (Exception ex) { LogAPI.Debug("ImportExcel异常:" + ex.Message); LogAPI.Debug("ImportExcel异常:" + ex.StackTrace); throw ex; } } } public class TreeNode { #region Property private string _Text; /// /// 显示的文本值 /// public string Name { get { return this._Text; } set { this._Text = value; } } private ContextMenu _cMenu; public ContextMenu cMenu { get { return this._cMenu; } set { this._cMenu = value; } } private bool? _Checked; /// /// 是否选中 /// public bool? Checked { get { return this._Checked; } set { this._Checked = value; } } private bool _IsExpanded; /// /// 是否展开 /// public bool IsExpanded { get { return this._IsExpanded; } set { this._IsExpanded = value; } } /// /// 节点图标:相对路径 /// public string Icon { get; set; } /// /// 子节点,默认null /// public IList Nodes { get; set; } /// /// 该节点数据项,默认null /// public virtual object Data { get; set; } public virtual bool IsOpenEdit { get; set; } public object Paixu { get; internal set; } public bool IsParent { get; internal set; } #endregion #region NodeX-构造函数(初始化) /// /// NodeX-构造函数(初始化) /// public TreeNode() { this.Name = string.Empty; this.Icon = string.Empty; this.Checked = false; } #endregion } public class DicTreeNode : System.ComponentModel.INotifyPropertyChanged { #region Property public event PropertyChangedEventHandler PropertyChanged; private string _Text; /// /// 显示的文本值 /// public string Text { get { return this._Text; } set { this._Text = value; if (this.PropertyChanged != null) { this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Text")); } } } private string _Name; public string Name { get { return this._Name; } set { this._Name = value; if (this.PropertyChanged != null) { this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Name")); } } } private ContextMenu _cMenu; public ContextMenu cMenu { get { return this._cMenu; } set { this._cMenu = value; if (this.PropertyChanged != null) { this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("cMenu")); } } } private bool? _Checked; /// /// 是否选中 /// public bool? Checked { get { return this._Checked; } set { this._Checked = value; if (this.PropertyChanged != null) { this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Checked")); } } } private bool _IsExpanded; /// /// 是否展开 /// public bool IsExpanded { get { return this._IsExpanded; } set { this._IsExpanded = value; if (this.PropertyChanged != null) { this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("IsExpanded")); } } } /// /// 节点图标:相对路径 /// private string _Icon; public string Icon { get { return this._Icon; } set { this._Icon = value; if (this.PropertyChanged != null) { this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Icon")); } } } /// /// 是否父节点 /// private bool _IsParent; public bool IsParent { get { return this._IsParent; } set { this._IsParent = value; if (this.PropertyChanged != null) { this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("IsParent")); } } } /// /// 子节点,默认null /// private ObservableCollection _Nodes; public ObservableCollection Nodes { get { return this._Nodes; } set { this._Nodes = value; if (this.PropertyChanged != null) { this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Nodes")); } } } private int _Paixu; public int Paixu { get { return this._Paixu; } set { this._Paixu = value; if (this.PropertyChanged != null) { this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Paixu")); } } } /// /// 该节点数据项,默认null /// private object _Data; public object Data { get { return this._Data; } set { this._Data = value; if (this.PropertyChanged != null) { this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Data")); } } } private bool _IsOpenEdit; public bool IsOpenEdit { get { return this._IsOpenEdit; } set { this._IsOpenEdit = value; if (this.PropertyChanged != null) { this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("IsOpenEdit")); } } } #endregion #region NodeX-构造函数(初始化) /// /// NodeX-构造函数(初始化) /// public DicTreeNode() { this.Name = string.Empty; this.Icon = string.Empty; this.Checked = false; this.IsParent = false; } #endregion } public class QSDWinformation { /// /// 权属单位名称 /// private string _qsdwmc; public string Qsdwmc { get { return _qsdwmc; } set { _qsdwmc = value; } } /// /// 权属单位代码 /// private string _qsdwdm; public string Qsdwdm { get { return _qsdwdm; } set { _qsdwdm = value; } } /// /// 坐落单位代码 /// private string _zldwdm; public string ZLDWDM { get { return _zldwdm; } set { _zldwdm = value; } } public string Zldwmc { get { return _zldwmc; } set { _zldwmc = value; } } public bool HasCheck { get; set; } /// /// 坐落单位名称 /// private string _zldwmc; public List ListQsdwInfor; } }