年度变更建库软件5.0版本
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2953 lines
129 KiB

6 months ago
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
{
/// <summary>
/// FrmDicManage.xaml 的交互逻辑
/// </summary>
public partial class FrmDicManage : BaseWindow
{
#region 全局变量
private string connStr = string.Empty;
string Cold = null;
/// <summary>
/// 导入权属单位集合
/// </summary>
private List<QSDWinformation> ListQsdwEntity = null;
/// <summary>
/// 权属单位集合-原始数据
/// </summary>
private List<QSDWinformation> ExcelLists = null;
/// <summary>
/// 处理掉的权属集合
/// </summary>
private List<QSDWinformation> RemoveQsdwEntity = null;
/// <summary>
/// 当前工程数据库连接
/// </summary>
private string dbPath = string.Empty;
/// <summary>
/// 省级代码
/// </summary>
KeyValuePair<string, string> ShengInfo { get; set; }
/// <summary>
/// 市级代码
/// </summary>
KeyValuePair<string, string> ShiInfo { get; set; }
/// <summary>
/// 县级代码
/// </summary>
KeyValuePair<string, string> XianInfo { get; set; }
/// <summary>
/// 省级代码
/// </summary>
List<QSDWinformation> ShengInfo2 { get; set; }
/// <summary>
/// 市级代码
/// </summary>
List<QSDWinformation> ShiInfo2 { get; set; }
/// <summary>
/// 县级代码
/// </summary>
List<QSDWinformation> 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<QSDWinformation>();
RemoveQsdwEntity = new List<QSDWinformation>();
ExcelLists = new List<QSDWinformation>();
dbPath = (MapsManager.Instance.MapService.GetProjectInfo() as ProjectInfo).GetDicDataPath();
Init();
frmDicManage = this;
}
/// <summary>
/// 初始化
/// </summary>
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);
}
}
/// <summary>
/// 加载数据
/// </summary>
/// <param name="treeNodss"></param>
/// <param name="IsParent"></param>
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<TreeNode> itemList = new ObservableCollection<TreeNode>();
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<TreeNode>();
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();
}
}
}
/// <summary>
/// 返回指示文件是否已被其它程序使用的布尔值
/// </summary>
/// <param name="fileFullName">文件的完全限定名,例如:“C:\MyFile.txt”。</param>
/// <returns>如果文件已被其它程序使用,则为 true;否则为 false。</returns>
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;
}
/// <summary>
/// 处理字典数据(区分县级与村级权属代码)
/// </summary>
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<QSDWinformation> 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<QSDWinformation> ListQsdm = null;
/// <summary>
/// 处理字典数据
/// </summary>
/// <param name="XJCode"></param>
/// <param name="XJName"></param>
public void OrderBy(string XJCode, string XJName)
{
try
{
if (ListQsdwEntity != null && ListQsdwEntity.Count > 0)
{
string XJName_Temp = string.Empty;
ListQsdm = new List<QSDWinformation>();
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<QSDWinformation> ListCjQsdm = new List<QSDWinformation>();
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<QSDWinformation> ListCjDMQsdm = new List<QSDWinformation>();
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;
}
}
/// <summary>
/// 检查数据库是否已经存在权属单位代码字典
/// </summary>
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
{ }
}
/// <summary>
/// 插入字典数据
/// </summary>
/// <param name="rdbHelper">数据库连接</param>
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;
}
}
/// <summary>
/// 左侧字典树选择改变事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void tvProperties_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> 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();
}
}
}
/// <summary>
/// 加载左侧选中字典的子节点
/// </summary>
/// <param name="drv"></param>
/// <param name="IsDic"></param>
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<DicTreeNode> itemList = new ObservableCollection<DicTreeNode>();
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<DicTreeNode>();
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<DicTreeNode>();
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();
}
/// <summary>
/// 添加字典(左侧树添加)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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<DicTreeNode> treeNodes = this.tvTypes.ItemsSource as ObservableCollection<DicTreeNode>;
ObservableCollection<DicTreeNode> treeNodes = IEnumerableToDicTreeNode(this.tvTypes.ItemsSource.Cast<TreeNode>());
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<DicTreeNode> itemsd = this.tvTypes.ItemsSource as ObservableCollection<DicTreeNode>;
ObservableCollection<DicTreeNode> itemsd = IEnumerableToDicTreeNode(this.tvTypes.ItemsSource.Cast<TreeNode>());
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<DicTreeNode> Nodesd = new ObservableCollection<DicTreeNode>();
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<DicTreeNode> treeNodes = this.tvTypes.ItemsSource as ObservableCollection<DicTreeNode>;
ObservableCollection<DicTreeNode> treeNodes = IEnumerableToDicTreeNode(this.tvTypes.ItemsSource.Cast<TreeNode>());
treeNodes.Add(txtNames);
treeNodes.OrderBy(x => x.Paixu).ToList();
ObservableCollection<DicTreeNode> treeNo = new ObservableCollection<DicTreeNode>();
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;
/// <summary>
/// 增加父级节点更新方法
/// </summary>
/// <param name="ss"></param>
/// <param name="ssd"></param>
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();
}
}
}
/// <summary>
/// 由于SelectedItem转换DicTreeNode失败,加此方法,用于手动转换
/// </summary>
/// <param name="tree">要转换的树节点</param>
/// <returns>转换后的DicTreeNode</returns>
/// 白明雅 2018-12-27
private DicTreeNode GetDicTreeNodeByTreeNode(TreeNode tree)
{
if (tree == null)
{
return null;
}
IList<TreeNode> treeNodes = tree.Nodes;
ObservableCollection<DicTreeNode> dicTreeNodes = new ObservableCollection<DicTreeNode>();
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;
}
/// <summary>
/// 根据TreeNode数组转化为DicTreeNode数组
/// </summary>
/// <param name="tree"></param>
/// <returns></returns>
/// 白明雅 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;
}
/// <summary>
/// ItemsSource转化ObservableCollection<DicTreeNode>
/// </summary>
/// <param name="treeNodes">this.tvTypes.ItemsSource.Cast<TreeNode>()</param>
/// <returns>ObservableCollection<DicTreeNode></returns>
/// 白明雅 2018-12-27
private ObservableCollection<DicTreeNode> IEnumerableToDicTreeNode(IEnumerable<TreeNode> treeNodes)
{
//IEnumerable<TreeNode> treeNodes = this.tvTypes.ItemsSource.Cast<TreeNode>();
TreeNode treeNode = treeNodes.First<TreeNode>() as TreeNode;
DicTreeNode dicTree = GetDicTreeNodeByTreeNode(treeNode);
ObservableCollection<DicTreeNode> UpdateNode = new ObservableCollection<DicTreeNode>();
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<DicTreeNode> UpdateNode = IEnumerableToDicTreeNode(this.tvTypes.ItemsSource.Cast<TreeNode>());
//------------------------------------
//白明雅 2018-12-27 转换失败 换上面方法
//ObservableCollection<DicTreeNode> UpdateNode = this.tvTypes.ItemsSource as ObservableCollection<DicTreeNode>;
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<DicTreeNode> NewUpdateNode = new ObservableCollection<DicTreeNode>();
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<DicTreeNode>
ObservableCollection<DicTreeNode> UpdateNode = IEnumerableToDicTreeNode(this.tvTypes.ItemsSource.Cast<TreeNode>());
if (res > 0)
{
this.txtDicName.Text = "";
this.txtAliasName.Text = "";
this.txtCode.Text = "";
this.txtParentName.Text = "";
Thread.Sleep(700);
ObservableCollection<DicTreeNode> 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<DicTreeNode> items = this.tvTypes.ItemsSource as ObservableCollection<DicTreeNode>;
// 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<DicTreeNode> items = this.tvTypes.ItemsSource as ObservableCollection<DicTreeNode>;
ObservableCollection<DicTreeNode> items = IEnumerableToDicTreeNode(this.tvTypes.ItemsSource.Cast<TreeNode>());
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<DicTreeNode> itemTree = this.tvDicDetail.ItemsSource as ObservableCollection<DicTreeNode>;
DicTreeNode itemsd = itemTree[0];
if (itemsd.Nodes == null)
{
ObservableCollection<DicTreeNode> ergod = new ObservableCollection<DicTreeNode>();
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<DicTreeNode> itemTree = this.tvDicDetail.ItemsSource as ObservableCollection<DicTreeNode>;
ObservableCollection<DicTreeNode> list = itemTree[0].Nodes as ObservableCollection<DicTreeNode>;
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<DicTreeNode> ergod = new ObservableCollection<DicTreeNode>();
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);
}
}
/// <summary>
/// 遍历子节点增加节点
/// </summary>
private void ergodicSubnode(ObservableCollection<DicTreeNode> 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<DicTreeNode> ergod = new ObservableCollection<DicTreeNode>();
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);
}
}
}
}
/// <summary>
/// 遍历子节点删除数据
/// </summary>
/// <param name="ergodic"></param>
/// <param name="Pid"></param>
private void ergodicSubnodeDelete(ObservableCollection<DicTreeNode> 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<string> sQSCodeList;
public List<string> sQSNameList;
public bool GetExcelAllRecord(Workbook the_workbook)
{
try
{
sQSCodeList = new List<string>();
sQSNameList = new List<string>();
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<string>();
sQSNameList = new List<string>();
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;
}
}
/// <summary>
/// 字典子项编辑
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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<DicTreeNode> ListTree = tvDicDetail.ItemsSource as ObservableCollection<DicTreeNode>;
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<DicTreeNode> items = this.tvDicDetail.ItemsSource as ObservableCollection<DicTreeNode>;
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<DicTreeNode> items = this.tvDicDetail.ItemsSource as ObservableCollection<DicTreeNode>;
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<DicTreeNode>;
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<DicTreeNode> itemsList = new ObservableCollection<DicTreeNode>();
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<DicTreeNode> itemTree = this.tvTypes.ItemsSource as ObservableCollection<DicTreeNode>;
//item = this.tvTypes.SelectedItem as DicTreeNode;
//白明雅 2018-12-28
ObservableCollection<DicTreeNode> itemTree = IEnumerableToDicTreeNode(this.tvTypes.ItemsSource.Cast<TreeNode>());
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<DicTreeNode> itemTree = this.tvDicDetail.ItemsSource as ObservableCollection<DicTreeNode>;
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 "";
}
}
/// <summary>
/// 代码及名称树状菜单点击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void tvDicDetail_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> 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();
}
}
}
/// <summary>
/// 保存字典
/// </summary>
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);
}
}
/// <summary>
/// 字典导入
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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);
}
}
/// <summary>
/// 字典导出
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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);
}
}
/// <summary>
/// 生成权属字典
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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<DataDicTionary> GetAllDic()
{
DataTable dt = null;
List<DataDicTionary> result = new List<DataDicTionary>();
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<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;
}
private void tvTypes_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
var treeViewItem = VisualUpwardSearch<TreeViewItem>(e.OriginalSource as DependencyObject) as TreeViewItem;
if (treeViewItem != null)
{
treeViewItem.Focus();
e.Handled = true;
}
}
static DependencyObject VisualUpwardSearch<T>(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<QSDWinformation>(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<QSDWinformation>(ListQsdwEntity);
}
rowindex++;
}
if (ListQsdwEntity.Count > 0)
{
///获取省市县信息
var shengcode = ListQsdwEntity.Where(x => x.ZLDWDM.Length == 2).FirstOrDefault();
ShengInfo = new KeyValuePair<string, string>(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<QSDWinformation>();//插入循环的数据
var shicode = ListQsdwEntity.Where(x => x.ZLDWDM.Length == 4).FirstOrDefault();
ShiInfo = new KeyValuePair<string, string>(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<QSDWinformation>();
var xiancode = ListQsdwEntity.Where(x => x.ZLDWDM.Length == 6).FirstOrDefault();
XianInfo = new KeyValuePair<string, string>(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<QSDWinformation>();
#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<QSDWinformation> Xianlist = new List<QSDWinformation>();
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<QSDWinformation> XianInfo2_ = new List<QSDWinformation>();
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;
/// <summary>
/// 显示的文本值
/// </summary>
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;
/// <summary>
/// 是否选中
/// </summary>
public bool? Checked
{
get { return this._Checked; }
set { this._Checked = value; }
}
private bool _IsExpanded;
/// <summary>
/// 是否展开
/// </summary>
public bool IsExpanded
{
get { return this._IsExpanded; }
set { this._IsExpanded = value; }
}
/// <summary>
/// 节点图标:相对路径
/// </summary>
public string Icon { get; set; }
/// <summary>
/// 子节点,默认null
/// </summary>
public IList<TreeNode> Nodes { get; set; }
/// <summary>
/// 该节点数据项,默认null
/// </summary>
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-构造函数(初始化)
/// <summary>
/// NodeX-构造函数(初始化)
/// </summary>
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;
/// <summary>
/// 显示的文本值
/// </summary>
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;
/// <summary>
/// 是否选中
/// </summary>
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;
/// <summary>
/// 是否展开
/// </summary>
public bool IsExpanded
{
get { return this._IsExpanded; }
set
{
this._IsExpanded = value;
if (this.PropertyChanged != null)
{
this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("IsExpanded"));
}
}
}
/// <summary>
/// 节点图标:相对路径
/// </summary>
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"));
}
}
}
/// <summary>
/// 是否父节点
/// </summary>
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"));
}
}
}
/// <summary>
/// 子节点,默认null
/// </summary>
private ObservableCollection<DicTreeNode> _Nodes;
public ObservableCollection<DicTreeNode> 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"));
}
}
}
/// <summary>
/// 该节点数据项,默认null
/// </summary>
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-构造函数(初始化)
/// <summary>
/// NodeX-构造函数(初始化)
/// </summary>
public DicTreeNode()
{
this.Name = string.Empty;
this.Icon = string.Empty;
this.Checked = false;
this.IsParent = false;
}
#endregion
}
public class QSDWinformation
{
/// <summary>
/// 权属单位名称
/// </summary>
private string _qsdwmc;
public string Qsdwmc
{
get
{
return _qsdwmc;
}
set
{
_qsdwmc = value;
}
}
/// <summary>
/// 权属单位代码
/// </summary>
private string _qsdwdm;
public string Qsdwdm
{
get
{
return _qsdwdm;
}
set
{
_qsdwdm = value;
}
}
/// <summary>
/// 坐落单位代码
/// </summary>
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; }
/// <summary>
/// 坐落单位名称
/// </summary>
private string _zldwmc;
public List<QSDWinformation> ListQsdwInfor;
}
}