Commit 65c771d2 authored by 罗显健's avatar 罗显健

【编号:24022】1.表开发工具优化:增加搜索面板 2.工具主界面菜单增加可折叠功能。

本次更新90%+的代码由AI生成。
parent fd287c75
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
...@@ -34,7 +34,7 @@ namespace Tools.MyCommon ...@@ -34,7 +34,7 @@ namespace Tools.MyCommon
/// <summary> /// <summary>
/// 用户信息 /// 用户信息
/// </summary> /// </summary>
public static class LoginInfo public static class LoginInfo
{ {
/// <summary> /// <summary>
/// 用户名 /// 用户名
...@@ -121,6 +121,21 @@ namespace Tools.MyCommon ...@@ -121,6 +121,21 @@ namespace Tools.MyCommon
/// 默认Excel/Word文件导出路径 /// 默认Excel/Word文件导出路径
/// </summary> /// </summary>
public static string DocExportPath => "DocExportPath"; public static string DocExportPath => "DocExportPath";
/// <summary>
/// 表设计器右侧面板展开状态
/// </summary>
public static string DBTableDevelop_RightPanelExpanded => "DBTableDevelop_RightPanelExpanded";
/// <summary>
/// 表设计器搜索类型(表/列)
/// </summary>
public static string DBTableDevelop_SearchType => "DBTableDevelop_SearchType";
/// <summary>
/// 表设计器是否搜索描述
/// </summary>
public static string DBTableDevelop_SearchDesc => "DBTableDevelop_SearchDesc";
} }
/// <summary> /// <summary>
/// 导出类型 /// 导出类型
......
...@@ -57,7 +57,7 @@ namespace Tools.MyUtils ...@@ -57,7 +57,7 @@ namespace Tools.MyUtils
/// <summary> /// <summary>
/// 打包工具、更新包生成目录 /// 打包工具、更新包生成目录
/// </summary> /// </summary>
public static string PackagePath => $@"{Application.StartupPath}\Package"; public static string PackagePath => $@"{Application.StartupPath}\Package";
#endregion #endregion
#region 常用日期 #region 常用日期
...@@ -188,6 +188,83 @@ namespace Tools.MyUtils ...@@ -188,6 +188,83 @@ namespace Tools.MyUtils
} }
#endregion
#region 读写系统配置文件(XML)
/// <summary>
/// 读取系统配置表(AppSetting)
/// </summary>
/// <returns>配置数据表</returns>
public static DataTable ReadSysConfig()
{
var dtSetting = new DataTable("AppSetting");
if (File.Exists(SysConfigFilePath))
{
dtSetting.ReadXml(SysConfigFilePath);
}
return dtSetting;
}
/// <summary>
/// 保存系统配置表(AppSetting)
/// </summary>
/// <param name="dtSetting">配置数据表</param>
public static void SaveSysConfig(DataTable dtSetting)
{
if (dtSetting != null)
{
dtSetting.WriteXml(SysConfigFilePath, XmlWriteMode.WriteSchema);
}
}
/// <summary>
/// 从配置表中获取指定配置值
/// </summary>
/// <param name="dt">配置数据表</param>
/// <param name="name">配置名称</param>
/// <returns>配置值</returns>
public static string GetConfigValue(DataTable dt, string name)
{
if (dt == null) return string.Empty;
var rows = dt.Select($"Name='{name}'");
return rows.Length > 0 ? rows[0]["Value"].ToString() : string.Empty;
}
/// <summary>
/// 在配置表中设置指定配置值(存在则更新,不存在则新增)
/// </summary>
/// <param name="dt">配置数据表</param>
/// <param name="name">配置名称</param>
/// <param name="value">配置值</param>
public static void SetConfigValue(DataTable dt, string name, string value)
{
if (dt == null) return;
var rows = dt.Select($"Name='{name}'");
if (rows.Length > 0)
{
rows[0]["Value"] = value;
rows[0].EndEdit();
}
else
{
var newRow = dt.NewRow();
newRow["Name"] = name;
newRow["Value"] = value;
dt.Rows.Add(newRow);
}
}
/// <summary>
/// 读取系统配置并转换为字典
/// </summary>
/// <returns>配置字典</returns>
public static Dictionary<string, string> ReadSysConfigAsDictionary()
{
var dtSetting = ReadSysConfig();
return dtSetting.Rows.Cast<DataRow>()
.ToDictionary(x => x["Name"].ToString(), x => x["Value"].ToString());
}
#endregion #endregion
#region 读写json配置文件 #region 读写json配置文件
...@@ -244,6 +321,7 @@ namespace Tools.MyUtils ...@@ -244,6 +321,7 @@ namespace Tools.MyUtils
} }
#endregion #endregion
#region 选择文件/路径 #region 选择文件/路径
/// <summary> /// <summary>
...@@ -289,6 +367,18 @@ namespace Tools.MyUtils ...@@ -289,6 +367,18 @@ namespace Tools.MyUtils
return result; return result;
} }
/// <summary>
/// 创建目录
/// </summary>
/// <param name="path"></param>
public static void CreatePathIfNotExists(string path)
{
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
}
#endregion #endregion
#region 检查文件大小 #region 检查文件大小
...@@ -332,7 +422,8 @@ namespace Tools.MyUtils ...@@ -332,7 +422,8 @@ namespace Tools.MyUtils
//EntryName用以指定压缩层级 //EntryName用以指定压缩层级
string EntryName = path.Substring($@"{rootPath}\".Length); //这里取根目录的相对路径 string EntryName = path.Substring($@"{rootPath}\".Length); //这里取根目录的相对路径
//创建新入口 //创建新入口
ZipEntry entry = new ZipEntry(EntryName) { ZipEntry entry = new ZipEntry(EntryName)
{
DateTime = DateTime.Now DateTime = DateTime.Now
}; };
zip.PutNextEntry(entry); zip.PutNextEntry(entry);
......
using System; using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data; using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
// //
using Tools.MyCommon; using Tools.MyCommon;
using Tools.MyData;
using Tools.MyUtils;
namespace Tools.MyUtils namespace Tools.MyUtils
{ {
...@@ -40,15 +32,14 @@ namespace Tools.MyUtils ...@@ -40,15 +32,14 @@ namespace Tools.MyUtils
private void wSysSetting_Load(object sender, EventArgs e) private void wSysSetting_Load(object sender, EventArgs e)
{ {
//读取设置信息 //读取设置信息
dtSetting = new DataTable("AppSetting"); dtSetting = Utils.ReadSysConfig();
dtSetting.ReadXml(Utils.SysConfigFilePath);
//填充界面 //填充界面
var linkString = this.GetValue(dtSetting, ConfigType.DefaultLink); var linkString = Utils.GetConfigValue(dtSetting, ConfigType.DefaultLink);
this.LinkModel = Utils.GetDbItemModel(linkString); this.LinkModel = Utils.GetDbItemModel(linkString);
this.tbDefaultLink.Text = this.LinkModel.ToString(); this.tbDefaultLink.Text = this.LinkModel.ToString();
this.tbModelExportPath.Text = this.GetValue(dtSetting, ConfigType.ModelExportPath); this.tbModelExportPath.Text = Utils.GetConfigValue(dtSetting, ConfigType.ModelExportPath);
this.tbSqlExportPath.Text = this.GetValue(dtSetting, ConfigType.SqlExportPath); this.tbSqlExportPath.Text = Utils.GetConfigValue(dtSetting, ConfigType.SqlExportPath);
this.tbDocExportPath.Text = this.GetValue(dtSetting, ConfigType.DocExportPath); this.tbDocExportPath.Text = Utils.GetConfigValue(dtSetting, ConfigType.DocExportPath);
//绑定事件 //绑定事件
this.btnSelectDbLink.Click += BtnSelectDbLink_Click; this.btnSelectDbLink.Click += BtnSelectDbLink_Click;
this.btnSelectModelPath.Click += BtnSelectModelPath_Click; this.btnSelectModelPath.Click += BtnSelectModelPath_Click;
...@@ -106,46 +97,15 @@ namespace Tools.MyUtils ...@@ -106,46 +97,15 @@ namespace Tools.MyUtils
private void BtnSave_Click(object sender, EventArgs e) private void BtnSave_Click(object sender, EventArgs e)
{ {
//将设置写入结构表 //将设置写入结构表
this.SetValue(dtSetting, ConfigType.DefaultLink, this.LinkModel.LinkString); Utils.SetConfigValue(dtSetting, ConfigType.DefaultLink, this.LinkModel.LinkString);
this.SetValue(dtSetting, ConfigType.ModelExportPath, this.tbModelExportPath.Text); Utils.SetConfigValue(dtSetting, ConfigType.ModelExportPath, this.tbModelExportPath.Text);
this.SetValue(dtSetting, ConfigType.SqlExportPath, this.tbSqlExportPath.Text); Utils.SetConfigValue(dtSetting, ConfigType.SqlExportPath, this.tbSqlExportPath.Text);
this.SetValue(dtSetting, ConfigType.DocExportPath, this.tbDocExportPath.Text); Utils.SetConfigValue(dtSetting, ConfigType.DocExportPath, this.tbDocExportPath.Text);
//保存设置 //保存设置
dtSetting.WriteXml(Utils.SysConfigFilePath, XmlWriteMode.WriteSchema); Utils.SaveSysConfig(dtSetting);
this.DialogResult = DialogResult.OK; this.DialogResult = DialogResult.OK;
} }
/// <summary>
/// 获取指定配置值
/// </summary>
/// <param name="dt"></param>
/// <param name="name"></param>
/// <returns></returns>
private string GetValue(DataTable dt, string name)
{
var result = "";
var rows = dt.Select($"Name='{name}'");
if (rows.Length > 0)
{
result = rows[0]["Value"].ToString();
}
return result;
}
/// <summary>
/// 设置指定配置值
/// </summary>
/// <param name="dt"></param>
/// <param name="name"></param>
/// <param name="value"></param>
private void SetValue(DataTable dt, string name, string value)
{
var rows = dt.Select($"Name='{name}'");
if (rows.Length > 0)
{
rows[0]["Value"] = value;
rows[0].EndEdit();
}
}
/// <summary> /// <summary>
/// 选择路径并赋值到文本框 /// 选择路径并赋值到文本框
/// </summary> /// </summary>
...@@ -158,7 +118,5 @@ namespace Tools.MyUtils ...@@ -158,7 +118,5 @@ namespace Tools.MyUtils
tb.Text = frm.SelectedPath; tb.Text = frm.SelectedPath;
} }
} }
} }
} }
...@@ -99,16 +99,7 @@ namespace Tools.UI.sys ...@@ -99,16 +99,7 @@ namespace Tools.UI.sys
//打包所有文件 //打包所有文件
DirectoryInfo dirInfo = new DirectoryInfo(path); DirectoryInfo dirInfo = new DirectoryInfo(path);
var fileInfos = dirInfo.GetFiles("*.*", SearchOption.AllDirectories).ToList(); var fileInfos = dirInfo.GetFiles("*.*", SearchOption.AllDirectories).ToList();
fileInfos = fileInfos.Where( fileInfos = fileInfos.Where(f => !IsFileIgnore(f)).ToList(); //剔除自动更新相关目录
f => !f.FullName.Contains("\\AutoUpdate\\") //剔除自动更新文件
&& !f.FullName.Contains(Utils.LogPath) && !f.FullName.Contains(Utils.TempPath) //日志、临时文件目录
&& !f.FullName.Contains(Utils.SavePath) // 系统预设的用户本地文件目录,需要排除
&& !f.FullName.Contains(Utils.PackagePath) //程序更新打包目录
&& !f.Name.Equals("links.xml") //剔除链接记录文件(本地常用数据库链接记录)
&& !f.Name.Equals("sys_cfg.xml") //剔除(表开发工具-系统配置)文件
&& !f.Extension.Equals(".json") //剔除json配置信息
&& !f.Extension.Equals("") //剔除无扩展名的文件(大部分是临时文件)
).ToList(); //剔除自动更新相关目录
//构造压缩文件路径集合 //构造压缩文件路径集合
List<string> FileNames = new List<string>(); List<string> FileNames = new List<string>();
FileNames.AddRange(fileInfos.Select(f => f.FullName)); FileNames.AddRange(fileInfos.Select(f => f.FullName));
...@@ -138,6 +129,26 @@ namespace Tools.UI.sys ...@@ -138,6 +129,26 @@ namespace Tools.UI.sys
this.AsyncUI(() => this._bar.Close()); this.AsyncUI(() => this._bar.Close());
}); });
} }
/// <summary>
/// 是否为需要剔除的文件
/// </summary>
/// <param name="f"></param>
/// <returns></returns>
private bool IsFileIgnore(FileInfo f)
{
return f.FullName.Contains("\\AutoUpdate\\") //剔除自动更新文件
|| f.FullName.Contains(Utils.LogPath) //日志、
|| f.FullName.Contains(Utils.TempPath) //临时文件目录
|| f.FullName.Contains(Utils.SavePath) // 系统预设的用户本地文件目录,需要排除
|| f.FullName.Contains(Utils.PackagePath) //程序更新打包目录
|| f.Name.Equals("links.xml") //剔除链接记录文件(本地常用数据库链接记录)
|| f.Name.Equals("sys_cfg.xml") //剔除(表开发工具-系统配置)文件
|| f.Extension.Equals(".json") //剔除json配置信息
|| f.FullName.Contains("\\WebKit\\")//剔除WebKit相关文件,太大了。
|| f.Extension.Equals(""); //剔除无扩展名的文件(大部分是临时文件)
}
private void btnSave_Click(object sender, EventArgs e) private void btnSave_Click(object sender, EventArgs e)
{ {
this.Save(); this.Save();
......
namespace Tools.UI namespace Tools.UI
{ {
partial class wDBTableDevelopTools partial class wDBTableDevelopTools
{ {
...@@ -48,13 +48,6 @@ ...@@ -48,13 +48,6 @@
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
this.tsbHelp = new System.Windows.Forms.ToolStripButton(); this.tsbHelp = new System.Windows.Forms.ToolStripButton();
this.dgvData = new System.Windows.Forms.DataGridView(); this.dgvData = new System.Windows.Forms.DataGridView();
this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column6 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Column3 = new System.Windows.Forms.DataGridViewCheckBoxColumn();
this.Column4 = new System.Windows.Forms.DataGridViewCheckBoxColumn();
this.Column7 = new System.Windows.Forms.DataGridViewCheckBoxColumn();
this.Column5 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
this.tsmiAddRow = new System.Windows.Forms.ToolStripMenuItem(); this.tsmiAddRow = new System.Windows.Forms.ToolStripMenuItem();
this.tsmiDelRow = new System.Windows.Forms.ToolStripMenuItem(); this.tsmiDelRow = new System.Windows.Forms.ToolStripMenuItem();
...@@ -63,10 +56,28 @@ ...@@ -63,10 +56,28 @@
this.label2 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label();
this.tbTableName = new System.Windows.Forms.TextBox(); this.tbTableName = new System.Windows.Forms.TextBox();
this.tbTableDescription = new System.Windows.Forms.TextBox(); this.tbTableDescription = new System.Windows.Forms.TextBox();
this.panel1 = new System.Windows.Forms.Panel();
this.lstResult = new System.Windows.Forms.ListBox();
this.tbSearch = new System.Windows.Forms.TextBox();
this.panel2 = new System.Windows.Forms.Panel();
this.ckbSearchDesc = new System.Windows.Forms.CheckBox();
this.radBtnColumn = new System.Windows.Forms.RadioButton();
this.radBtnTable = new System.Windows.Forms.RadioButton();
this.btnToggle = new System.Windows.Forms.Button();
this.radioButton2 = new System.Windows.Forms.RadioButton();
this.FieldName = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Description = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.ColumnType = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.IsNotNull = new System.Windows.Forms.DataGridViewCheckBoxColumn();
this.IsPrimaryKey = new System.Windows.Forms.DataGridViewCheckBoxColumn();
this.IsAutoIncrement = new System.Windows.Forms.DataGridViewCheckBoxColumn();
this.DefaultValue = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.toolStrip1.SuspendLayout(); this.toolStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.dgvData)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.dgvData)).BeginInit();
this.contextMenuStrip1.SuspendLayout(); this.contextMenuStrip1.SuspendLayout();
this.tableLayoutPanel1.SuspendLayout(); this.tableLayoutPanel1.SuspendLayout();
this.panel1.SuspendLayout();
this.panel2.SuspendLayout();
this.SuspendLayout(); this.SuspendLayout();
// //
// toolStrip1 // toolStrip1
...@@ -218,14 +229,14 @@ ...@@ -218,14 +229,14 @@
this.dgvData.BackgroundColor = System.Drawing.SystemColors.Window; this.dgvData.BackgroundColor = System.Drawing.SystemColors.Window;
this.dgvData.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.dgvData.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dgvData.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.dgvData.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.Column1, this.FieldName,
this.Column6, this.Description,
this.Column2, this.ColumnType,
this.Column3, this.IsNotNull,
this.Column4, this.IsPrimaryKey,
this.Column7, this.IsAutoIncrement,
this.Column5}); this.DefaultValue});
this.tableLayoutPanel1.SetColumnSpan(this.dgvData, 8); this.tableLayoutPanel1.SetColumnSpan(this.dgvData, 4);
this.dgvData.ContextMenuStrip = this.contextMenuStrip1; this.dgvData.ContextMenuStrip = this.contextMenuStrip1;
this.dgvData.Dock = System.Windows.Forms.DockStyle.Fill; this.dgvData.Dock = System.Windows.Forms.DockStyle.Fill;
this.dgvData.Location = new System.Drawing.Point(3, 31); this.dgvData.Location = new System.Drawing.Point(3, 31);
...@@ -233,59 +244,9 @@ ...@@ -233,59 +244,9 @@
this.dgvData.Name = "dgvData"; this.dgvData.Name = "dgvData";
this.tableLayoutPanel1.SetRowSpan(this.dgvData, 2); this.tableLayoutPanel1.SetRowSpan(this.dgvData, 2);
this.dgvData.RowTemplate.Height = 23; this.dgvData.RowTemplate.Height = 23;
this.dgvData.Size = new System.Drawing.Size(927, 516); this.dgvData.Size = new System.Drawing.Size(650, 516);
this.dgvData.TabIndex = 1; this.dgvData.TabIndex = 1;
// //
// Column1
//
this.Column1.DataPropertyName = "FieldName";
this.Column1.HeaderText = "字段";
this.Column1.Name = "Column1";
//
// Column6
//
this.Column6.DataPropertyName = "Description";
this.Column6.HeaderText = "说明";
this.Column6.Name = "Column6";
//
// Column2
//
this.Column2.DataPropertyName = "ColumnType";
this.Column2.HeaderText = "类型";
this.Column2.Name = "Column2";
this.Column2.Resizable = System.Windows.Forms.DataGridViewTriState.True;
this.Column2.Width = 150;
//
// Column3
//
this.Column3.DataPropertyName = "IsNotNull";
this.Column3.HeaderText = "非空";
this.Column3.Name = "Column3";
this.Column3.Resizable = System.Windows.Forms.DataGridViewTriState.True;
this.Column3.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic;
//
// Column4
//
this.Column4.DataPropertyName = "IsPrimaryKey";
this.Column4.HeaderText = "主键";
this.Column4.Name = "Column4";
this.Column4.Resizable = System.Windows.Forms.DataGridViewTriState.True;
this.Column4.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic;
//
// Column7
//
this.Column7.DataPropertyName = "IsAutoIncrement";
this.Column7.HeaderText = "自增";
this.Column7.Name = "Column7";
this.Column7.Resizable = System.Windows.Forms.DataGridViewTriState.True;
this.Column7.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic;
//
// Column5
//
this.Column5.DataPropertyName = "DefaultValue";
this.Column5.HeaderText = "默认值";
this.Column5.Name = "Column5";
//
// contextMenuStrip1 // contextMenuStrip1
// //
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
...@@ -308,20 +269,20 @@ ...@@ -308,20 +269,20 @@
// //
// tableLayoutPanel1 // tableLayoutPanel1
// //
this.tableLayoutPanel1.ColumnCount = 8; this.tableLayoutPanel1.ColumnCount = 6;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 75F)); this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 75F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 40F)); this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 75F)); this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 75F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 40F)); this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 5F)); this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 15F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 5F)); this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 262F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 5F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 5F));
this.tableLayoutPanel1.Controls.Add(this.dgvData, 0, 1); this.tableLayoutPanel1.Controls.Add(this.dgvData, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0); this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.label2, 2, 0); this.tableLayoutPanel1.Controls.Add(this.label2, 2, 0);
this.tableLayoutPanel1.Controls.Add(this.tbTableName, 1, 0); this.tableLayoutPanel1.Controls.Add(this.tbTableName, 1, 0);
this.tableLayoutPanel1.Controls.Add(this.tbTableDescription, 3, 0); this.tableLayoutPanel1.Controls.Add(this.tbTableDescription, 3, 0);
this.tableLayoutPanel1.Controls.Add(this.panel1, 5, 0);
this.tableLayoutPanel1.Controls.Add(this.btnToggle, 4, 1);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 24); this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 24);
this.tableLayoutPanel1.Name = "tableLayoutPanel1"; this.tableLayoutPanel1.Name = "tableLayoutPanel1";
...@@ -345,7 +306,7 @@ ...@@ -345,7 +306,7 @@
// label2 // label2
// //
this.label2.Dock = System.Windows.Forms.DockStyle.Fill; this.label2.Dock = System.Windows.Forms.DockStyle.Fill;
this.label2.Location = new System.Drawing.Point(391, 0); this.label2.Location = new System.Drawing.Point(331, 0);
this.label2.Name = "label2"; this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(69, 27); this.label2.Size = new System.Drawing.Size(69, 27);
this.label2.TabIndex = 3; this.label2.TabIndex = 3;
...@@ -357,17 +318,165 @@ ...@@ -357,17 +318,165 @@
this.tbTableName.Dock = System.Windows.Forms.DockStyle.Fill; this.tbTableName.Dock = System.Windows.Forms.DockStyle.Fill;
this.tbTableName.Location = new System.Drawing.Point(78, 3); this.tbTableName.Location = new System.Drawing.Point(78, 3);
this.tbTableName.Name = "tbTableName"; this.tbTableName.Name = "tbTableName";
this.tbTableName.Size = new System.Drawing.Size(307, 23); this.tbTableName.Size = new System.Drawing.Size(247, 23);
this.tbTableName.TabIndex = 4; this.tbTableName.TabIndex = 4;
// //
// tbTableDescription // tbTableDescription
// //
this.tbTableDescription.Dock = System.Windows.Forms.DockStyle.Fill; this.tbTableDescription.Dock = System.Windows.Forms.DockStyle.Fill;
this.tbTableDescription.Location = new System.Drawing.Point(466, 3); this.tbTableDescription.Location = new System.Drawing.Point(406, 3);
this.tbTableDescription.Name = "tbTableDescription"; this.tbTableDescription.Name = "tbTableDescription";
this.tbTableDescription.Size = new System.Drawing.Size(307, 23); this.tbTableDescription.Size = new System.Drawing.Size(247, 23);
this.tbTableDescription.TabIndex = 5; this.tbTableDescription.TabIndex = 5;
// //
// panel1
//
this.panel1.Controls.Add(this.lstResult);
this.panel1.Controls.Add(this.tbSearch);
this.panel1.Controls.Add(this.panel2);
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel1.Location = new System.Drawing.Point(674, 3);
this.panel1.Name = "panel1";
this.tableLayoutPanel1.SetRowSpan(this.panel1, 3);
this.panel1.Size = new System.Drawing.Size(256, 545);
this.panel1.TabIndex = 6;
//
// lstResult
//
this.lstResult.Dock = System.Windows.Forms.DockStyle.Fill;
this.lstResult.FormattingEnabled = true;
this.lstResult.ItemHeight = 17;
this.lstResult.Location = new System.Drawing.Point(0, 44);
this.lstResult.Name = "lstResult";
this.lstResult.Size = new System.Drawing.Size(256, 501);
this.lstResult.TabIndex = 1;
//
// tbSearch
//
this.tbSearch.Dock = System.Windows.Forms.DockStyle.Top;
this.tbSearch.Location = new System.Drawing.Point(0, 21);
this.tbSearch.Name = "tbSearch";
this.tbSearch.Size = new System.Drawing.Size(256, 23);
this.tbSearch.TabIndex = 0;
this.tbSearch.KeyDown += new System.Windows.Forms.KeyEventHandler(this.tbSearch_KeyDown);
//
// panel2
//
this.panel2.Controls.Add(this.ckbSearchDesc);
this.panel2.Controls.Add(this.radBtnColumn);
this.panel2.Controls.Add(this.radBtnTable);
this.panel2.Dock = System.Windows.Forms.DockStyle.Top;
this.panel2.Location = new System.Drawing.Point(0, 0);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(256, 21);
this.panel2.TabIndex = 7;
//
// ckbSearchDesc
//
this.ckbSearchDesc.AutoSize = true;
this.ckbSearchDesc.Dock = System.Windows.Forms.DockStyle.Right;
this.ckbSearchDesc.Location = new System.Drawing.Point(193, 0);
this.ckbSearchDesc.Name = "ckbSearchDesc";
this.ckbSearchDesc.Size = new System.Drawing.Size(63, 21);
this.ckbSearchDesc.TabIndex = 2;
this.ckbSearchDesc.Text = "搜说明";
this.ckbSearchDesc.UseVisualStyleBackColor = true;
//
// radBtnColumn
//
this.radBtnColumn.Dock = System.Windows.Forms.DockStyle.Left;
this.radBtnColumn.Location = new System.Drawing.Point(80, 0);
this.radBtnColumn.Name = "radBtnColumn";
this.radBtnColumn.Size = new System.Drawing.Size(80, 21);
this.radBtnColumn.TabIndex = 1;
this.radBtnColumn.Text = "列";
this.radBtnColumn.UseVisualStyleBackColor = true;
//
// radBtnTable
//
this.radBtnTable.Checked = true;
this.radBtnTable.Dock = System.Windows.Forms.DockStyle.Left;
this.radBtnTable.Location = new System.Drawing.Point(0, 0);
this.radBtnTable.Name = "radBtnTable";
this.radBtnTable.Size = new System.Drawing.Size(80, 21);
this.radBtnTable.TabIndex = 0;
this.radBtnTable.TabStop = true;
this.radBtnTable.Text = "表";
this.radBtnTable.UseVisualStyleBackColor = true;
//
// btnToggle
//
this.btnToggle.Dock = System.Windows.Forms.DockStyle.Fill;
this.btnToggle.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnToggle.Location = new System.Drawing.Point(656, 27);
this.btnToggle.Margin = new System.Windows.Forms.Padding(0);
this.btnToggle.Name = "btnToggle";
this.tableLayoutPanel1.SetRowSpan(this.btnToggle, 2);
this.btnToggle.Size = new System.Drawing.Size(15, 524);
this.btnToggle.TabIndex = 8;
this.btnToggle.Text = ">";
this.btnToggle.UseVisualStyleBackColor = true;
//
// radioButton2
//
this.radioButton2.Location = new System.Drawing.Point(0, 0);
this.radioButton2.Name = "radioButton2";
this.radioButton2.Size = new System.Drawing.Size(104, 24);
this.radioButton2.TabIndex = 0;
//
// FieldName
//
this.FieldName.DataPropertyName = "FieldName";
this.FieldName.HeaderText = "字段";
this.FieldName.Name = "FieldName";
//
// Description
//
this.Description.DataPropertyName = "Description";
this.Description.HeaderText = "说明";
this.Description.Name = "Description";
//
// ColumnType
//
this.ColumnType.DataPropertyName = "ColumnType";
this.ColumnType.HeaderText = "类型";
this.ColumnType.Name = "ColumnType";
this.ColumnType.Resizable = System.Windows.Forms.DataGridViewTriState.True;
this.ColumnType.Width = 150;
//
// IsNotNull
//
this.IsNotNull.DataPropertyName = "IsNotNull";
this.IsNotNull.HeaderText = "非空";
this.IsNotNull.Name = "IsNotNull";
this.IsNotNull.Resizable = System.Windows.Forms.DataGridViewTriState.True;
this.IsNotNull.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic;
this.IsNotNull.Width = 65;
//
// IsPrimaryKey
//
this.IsPrimaryKey.DataPropertyName = "IsPrimaryKey";
this.IsPrimaryKey.HeaderText = "主键";
this.IsPrimaryKey.Name = "IsPrimaryKey";
this.IsPrimaryKey.Resizable = System.Windows.Forms.DataGridViewTriState.True;
this.IsPrimaryKey.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic;
this.IsPrimaryKey.Width = 65;
//
// IsAutoIncrement
//
this.IsAutoIncrement.DataPropertyName = "IsAutoIncrement";
this.IsAutoIncrement.HeaderText = "自增";
this.IsAutoIncrement.Name = "IsAutoIncrement";
this.IsAutoIncrement.Resizable = System.Windows.Forms.DataGridViewTriState.True;
this.IsAutoIncrement.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic;
this.IsAutoIncrement.Width = 65;
//
// DefaultValue
//
this.DefaultValue.DataPropertyName = "DefaultValue";
this.DefaultValue.HeaderText = "默认值";
this.DefaultValue.Name = "DefaultValue";
//
// wDBTableDevelopTools // wDBTableDevelopTools
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F);
...@@ -375,7 +484,6 @@ ...@@ -375,7 +484,6 @@
this.ClientSize = new System.Drawing.Size(933, 575); this.ClientSize = new System.Drawing.Size(933, 575);
this.Controls.Add(this.tableLayoutPanel1); this.Controls.Add(this.tableLayoutPanel1);
this.Controls.Add(this.toolStrip1); this.Controls.Add(this.toolStrip1);
this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
this.Name = "wDBTableDevelopTools"; this.Name = "wDBTableDevelopTools";
this.Text = "数据库表开发工具"; this.Text = "数据库表开发工具";
...@@ -386,6 +494,10 @@ ...@@ -386,6 +494,10 @@
this.contextMenuStrip1.ResumeLayout(false); this.contextMenuStrip1.ResumeLayout(false);
this.tableLayoutPanel1.ResumeLayout(false); this.tableLayoutPanel1.ResumeLayout(false);
this.tableLayoutPanel1.PerformLayout(); this.tableLayoutPanel1.PerformLayout();
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.panel2.ResumeLayout(false);
this.panel2.PerformLayout();
this.ResumeLayout(false); this.ResumeLayout(false);
this.PerformLayout(); this.PerformLayout();
...@@ -420,12 +532,21 @@ ...@@ -420,12 +532,21 @@
private System.Windows.Forms.ToolStripButton tsbLoadTable; private System.Windows.Forms.ToolStripButton tsbLoadTable;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; private System.Windows.Forms.ToolStripSeparator toolStripSeparator5;
private System.Windows.Forms.ToolStripButton tsbSysSetting; private System.Windows.Forms.ToolStripButton tsbSysSetting;
private System.Windows.Forms.DataGridViewTextBoxColumn Column1; private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.DataGridViewTextBoxColumn Column6; private System.Windows.Forms.TextBox tbSearch;
private System.Windows.Forms.DataGridViewTextBoxColumn Column2; private System.Windows.Forms.ListBox lstResult;
private System.Windows.Forms.DataGridViewCheckBoxColumn Column3; private System.Windows.Forms.RadioButton radioButton2;
private System.Windows.Forms.DataGridViewCheckBoxColumn Column4; private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.DataGridViewCheckBoxColumn Column7; private System.Windows.Forms.RadioButton radBtnColumn;
private System.Windows.Forms.DataGridViewTextBoxColumn Column5; private System.Windows.Forms.RadioButton radBtnTable;
private System.Windows.Forms.Button btnToggle;
private System.Windows.Forms.CheckBox ckbSearchDesc;
private System.Windows.Forms.DataGridViewTextBoxColumn FieldName;
private System.Windows.Forms.DataGridViewTextBoxColumn Description;
private System.Windows.Forms.DataGridViewTextBoxColumn ColumnType;
private System.Windows.Forms.DataGridViewCheckBoxColumn IsNotNull;
private System.Windows.Forms.DataGridViewCheckBoxColumn IsPrimaryKey;
private System.Windows.Forms.DataGridViewCheckBoxColumn IsAutoIncrement;
private System.Windows.Forms.DataGridViewTextBoxColumn DefaultValue;
} }
} }
\ No newline at end of file
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel;
using System.Data; using System.Data;
using System.Diagnostics;
using System.Drawing; using System.Drawing;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
// //
using Tools.MyCommon; using Tools.MyCommon;
...@@ -23,6 +20,11 @@ namespace Tools.UI ...@@ -23,6 +20,11 @@ namespace Tools.UI
/// </summary> /// </summary>
Dictionary<string, string> dicConfig = null; Dictionary<string, string> dicConfig = null;
/// <summary>
/// 右侧面板展开时的宽度
/// </summary>
private const int RIGHT_PANEL_WIDTH = 262;
/// <summary> /// <summary>
/// 基础信息表 /// 基础信息表
/// </summary> /// </summary>
...@@ -39,6 +41,10 @@ namespace Tools.UI ...@@ -39,6 +41,10 @@ namespace Tools.UI
/// 表的描述 /// 表的描述
/// </summary> /// </summary>
string TableDescription => this.tbTableDescription.Text.Trim(); string TableDescription => this.tbTableDescription.Text.Trim();
/// <summary>
/// 右侧面板是否展开
/// </summary>
bool isRightPanelExpanded = true;
public wDBTableDevelopTools() public wDBTableDevelopTools()
{ {
...@@ -53,7 +59,7 @@ namespace Tools.UI ...@@ -53,7 +59,7 @@ namespace Tools.UI
private void InitSystem() private void InitSystem()
{ {
if(!File.Exists(Utils.SysConfigFilePath)) if (!File.Exists(Utils.SysConfigFilePath))
{ {
#region 结构初始化 #region 结构初始化
...@@ -68,6 +74,9 @@ namespace Tools.UI ...@@ -68,6 +74,9 @@ namespace Tools.UI
{ ConfigType.ModelExportPath, Utils.TempPath }, { ConfigType.ModelExportPath, Utils.TempPath },
{ ConfigType.SqlExportPath, Utils.TempPath }, { ConfigType.SqlExportPath, Utils.TempPath },
{ ConfigType.DocExportPath, Utils.TempPath }, { ConfigType.DocExportPath, Utils.TempPath },
{ ConfigType.DBTableDevelop_RightPanelExpanded, "True" },
{ ConfigType.DBTableDevelop_SearchType, "Table" },
{ ConfigType.DBTableDevelop_SearchDesc, "False" },
}, },
}; };
dtSetting.PrimaryKey = new DataColumn[] { dtSetting.Columns[0] }; dtSetting.PrimaryKey = new DataColumn[] { dtSetting.Columns[0] };
...@@ -139,6 +148,17 @@ namespace Tools.UI ...@@ -139,6 +148,17 @@ namespace Tools.UI
this.tsmiDelRow.Click += TsmiDelRow_Click; this.tsmiDelRow.Click += TsmiDelRow_Click;
//文本框-事件 //文本框-事件
this.tbTableName.KeyDown += TbTableName_KeyDown; this.tbTableName.KeyDown += TbTableName_KeyDown;
//搜索结果列表-事件
this.lstResult.DoubleClick += LstResult_DoubleClick;
//单选按钮-事件
this.radBtnTable.CheckedChanged += RadBtn_CheckedChanged;
this.radBtnColumn.CheckedChanged += RadBtn_CheckedChanged;
//折叠按钮-事件
this.btnToggle.Click += BtnToggle_Click;
//窗体关闭事件
this.FormClosing += WDBTableDevelopTools_FormClosing;
//恢复右侧面板状态
this.RestoreRightPanelState();
} }
private void BindBaseInfo() private void BindBaseInfo()
...@@ -172,7 +192,7 @@ namespace Tools.UI ...@@ -172,7 +192,7 @@ namespace Tools.UI
} }
private void DgvData_CellValueChanged(object sender, DataGridViewCellEventArgs e) private void DgvData_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{ {
} }
private void DgvData_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) private void DgvData_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{ {
...@@ -191,7 +211,7 @@ namespace Tools.UI ...@@ -191,7 +211,7 @@ namespace Tools.UI
"VARCHAR(50)", "VARCHAR(MAX)", "VARCHAR(50)", "VARCHAR(MAX)",
"NVARCHAR(50)", "NVARCHAR(MAX)", "NVARCHAR(50)", "NVARCHAR(MAX)",
"UNIQUEIDENTIFIER" "UNIQUEIDENTIFIER"
}; };
} }
} }
} }
...@@ -259,7 +279,7 @@ namespace Tools.UI ...@@ -259,7 +279,7 @@ namespace Tools.UI
Utils.Tip(ex.Message); Utils.Tip(ex.Message);
return; return;
} }
} }
private void TsmiExportExcel_Click(object sender, EventArgs e) private void TsmiExportExcel_Click(object sender, EventArgs e)
{ {
...@@ -399,6 +419,101 @@ namespace Tools.UI ...@@ -399,6 +419,101 @@ namespace Tools.UI
#endregion #endregion
#region 右侧搜索版面-事件
/// <summary>
/// 单选按钮-事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void RadBtn_CheckedChanged(object sender, EventArgs e)
{
//清空搜索框
this.tbSearch.Text = string.Empty;
//清空结果列表
this.lstResult.Items.Clear();
}
/// <summary>
/// 搜索结果列表事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void LstResult_DoubleClick(object sender, EventArgs e)
{
if (this.lstResult.SelectedItem != null)
{
var selectedText = this.lstResult.SelectedItem.ToString();
//设置等待光标
this.Cursor = Cursors.WaitCursor;
try
{
//如果是列搜索结果,格式为 "TableName.ColumnName"
if (this.radBtnColumn.Checked && selectedText.Contains("."))
{
//提取表名和列名
var parts = selectedText.Split('.');
var tableName = parts[0];
var columnName = parts[1];
//加载表数据
this.tbTableName.Text = tableName;
this.InitTableColumnInfo(tableName);
//定位到指定列
this.LocateToColumn(columnName);
}
else if (this.radBtnTable.Checked)
{
//表搜索结果,直接使用
this.tbTableName.Text = selectedText;
this.InitTableColumnInfo(selectedText);
}
}
finally
{
//恢复默认光标
this.Cursor = Cursors.Default;
}
}
}
/// <summary>
/// 折叠按钮-事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnToggle_Click(object sender, EventArgs e)
{
//切换状态
this.SetRightPanelState(!isRightPanelExpanded);
}
private void tbSearch_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
this.ExecuteDBSearch();
}
}
#endregion
#region 窗体关闭事件
private void WDBTableDevelopTools_FormClosing(object sender, FormClosingEventArgs e)
{
//保存右侧面板状态
this.SaveRightPanelState();
}
#endregion
#region 私有方法
/// <summary> /// <summary>
/// 明细检查 /// 明细检查
/// </summary> /// </summary>
...@@ -451,14 +566,15 @@ namespace Tools.UI ...@@ -451,14 +566,15 @@ namespace Tools.UI
private void SetConfig() private void SetConfig()
{ {
//读取配置信息 //读取配置信息
var dtSetting = new DataTable("AppSetting"); this.dicConfig = Utils.ReadSysConfigAsDictionary();
dtSetting.ReadXml(Utils.SysConfigFilePath); if (!dicConfig.ContainsKey(ConfigType.DefaultLink)) return;
//保存到全局字典对象
this.dicConfig = dtSetting.Rows.Cast<DataRow>().ToDictionary(x => x["Name"].ToString(), x => x["Value"].ToString());
//初始化数据库链接 //初始化数据库链接
var link = dicConfig["DefaultLink"]; var link = dicConfig[ConfigType.DefaultLink];
this.tstbDbLink.Text = Utils.GetDbItemModel(link).ToString(); if (!string.IsNullOrEmpty(link))
this.InitDBHelper(link); //初始化数据访问对象 {
this.tstbDbLink.Text = Utils.GetDbItemModel(link).ToString();
this.InitDBHelper(link); //初始化数据访问对象
}
} }
/// <summary> /// <summary>
/// 创建明细新行 /// 创建明细新行
...@@ -469,7 +585,7 @@ namespace Tools.UI ...@@ -469,7 +585,7 @@ namespace Tools.UI
var str = this._ds.Tables[infoTable].Compute("MAX(FieldName)", "FieldName like 'NewField%'").ToString(); var str = this._ds.Tables[infoTable].Compute("MAX(FieldName)", "FieldName like 'NewField%'").ToString();
var max = string.IsNullOrEmpty(str) ? 0 : int.Parse(str.Replace("NewField", "")); var max = string.IsNullOrEmpty(str) ? 0 : int.Parse(str.Replace("NewField", ""));
var drNew = this._ds.Tables[infoTable].NewRow(); var drNew = this._ds.Tables[infoTable].NewRow();
drNew["FieldName"] = $"NewField{Utils.GenSerialNo(max+1)}"; drNew["FieldName"] = $"NewField{Utils.GenSerialNo(max + 1)}";
drNew["ColumnType"] = "VARCHAR(50)"; drNew["ColumnType"] = "VARCHAR(50)";
drNew.EndEdit(); drNew.EndEdit();
...@@ -492,7 +608,7 @@ namespace Tools.UI ...@@ -492,7 +608,7 @@ namespace Tools.UI
} }
return path; return path;
} }
/// <summary> /// <summary>
/// 初始化SQL依赖 /// 初始化SQL依赖
/// </summary> /// </summary>
...@@ -522,21 +638,10 @@ namespace Tools.UI ...@@ -522,21 +638,10 @@ namespace Tools.UI
/// </summary> /// </summary>
private void InitDefaultPath() private void InitDefaultPath()
{ {
this.CreatePath(Utils.ConfigPath); Utils.CreatePathIfNotExists(Utils.ConfigPath);
this.CreatePath(Utils.LogPath); Utils.CreatePathIfNotExists(Utils.LogPath);
this.CreatePath(Utils.SavePath); Utils.CreatePathIfNotExists(Utils.SavePath);
this.CreatePath(Utils.TempPath); Utils.CreatePathIfNotExists(Utils.TempPath);
}
/// <summary>
/// 创建目录
/// </summary>
/// <param name="path"></param>
private void CreatePath(string path)
{
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
} }
/// <summary> /// <summary>
...@@ -625,10 +730,305 @@ namespace Tools.UI ...@@ -625,10 +730,305 @@ namespace Tools.UI
} }
#endregion
#region 右侧面板状态管理
/// <summary>
/// 设置右侧面板状态
/// </summary>
/// <param name="isExpanded">是否展开</param>
private void SetRightPanelState(bool isExpanded)
{
//设置面板宽度和按钮文字
this.tableLayoutPanel1.ColumnStyles[5].SizeType = SizeType.Absolute;
this.tableLayoutPanel1.ColumnStyles[5].Width = isExpanded ? RIGHT_PANEL_WIDTH : 0;
this.btnToggle.Text = isExpanded ? ">" : "<";
this.isRightPanelExpanded = isExpanded;
//强制刷新布局和按钮
this.tableLayoutPanel1.PerformLayout();
this.btnToggle.Refresh();
}
/// <summary>
/// 恢复右侧面板状态
/// </summary>
private void RestoreRightPanelState()
{
if (dicConfig == null)
return;
//恢复面板展开/折叠状态
if (dicConfig.ContainsKey(ConfigType.DBTableDevelop_RightPanelExpanded))
{
var expanded = dicConfig[ConfigType.DBTableDevelop_RightPanelExpanded];
if (bool.TryParse(expanded, out bool isExpanded))
{
this.SetRightPanelState(isExpanded);
}
}
//恢复搜索类型(表/列)
if (dicConfig.ContainsKey(ConfigType.DBTableDevelop_SearchType))
{
var searchType = dicConfig[ConfigType.DBTableDevelop_SearchType];
if (searchType == "Table")
{
this.radBtnTable.Checked = true;
}
else if (searchType == "Column")
{
this.radBtnColumn.Checked = true;
}
}
//恢复搜索描述选项
if (dicConfig.ContainsKey(ConfigType.DBTableDevelop_SearchDesc))
{
var searchDesc = dicConfig[ConfigType.DBTableDevelop_SearchDesc];
if (bool.TryParse(searchDesc, out bool isSearchDesc))
{
this.ckbSearchDesc.Checked = isSearchDesc;
}
}
}
/// <summary>
/// 保存右侧面板状态
/// </summary>
private void SaveRightPanelState()
{
try
{
var dtSetting = Utils.ReadSysConfig();
//保存面板展开/折叠状态
Utils.SetConfigValue(dtSetting, ConfigType.DBTableDevelop_RightPanelExpanded, isRightPanelExpanded.ToString());
//保存搜索类型(表/列)
var searchType = this.radBtnTable.Checked ? "Table" : "Column";
Utils.SetConfigValue(dtSetting, ConfigType.DBTableDevelop_SearchType, searchType);
//保存搜索描述选项
Utils.SetConfigValue(dtSetting, ConfigType.DBTableDevelop_SearchDesc, this.ckbSearchDesc.Checked.ToString());
Utils.SaveSysConfig(dtSetting);
}
catch (Exception ex)
{
//静默处理,不影响窗体关闭
System.Diagnostics.Debug.WriteLine($"保存右侧面板状态失败:{ex.Message}");
}
}
#endregion
#region 列定位功能
/// <summary>
/// 定位到指定列
/// </summary>
/// <param name="columnName">列名</param>
private void LocateToColumn(string columnName)
{
if (this.dgvData.Rows.Count == 0)
return;
try
{
//在数据表中查找指定的列
foreach (DataGridViewRow row in this.dgvData.Rows)
{
//使用与DataPropertyName一致的列名访问单元格,提高可读性
if (row.Cells["FieldName"].Value != null &&
row.Cells["FieldName"].Value.ToString().Equals(columnName, StringComparison.OrdinalIgnoreCase))
{
//取消所有行的选中状态
this.dgvData.ClearSelection();
//选中找到的行
row.Selected = true;
#region 待开发:支持查询后修改指定列类型列名等 //设置当前单元格
this.dgvData.CurrentCell = row.Cells[0];
//滚动到可见区域
this.dgvData.FirstDisplayedScrollingRowIndex = row.Index;
break;
}
}
}
catch (Exception ex)
{
//定位失败不影响主流程,仅记录日志
System.Diagnostics.Debug.WriteLine($"定位到列失败:{ex.Message}");
}
}
#endregion #endregion
#region 右侧数据库搜索
/// <summary>
/// 执行数据库搜索操作
/// </summary>
private void ExecuteDBSearch()
{
//验证搜索前提条件
if (!this.ValidateSearchConditions(out string searchText))
{
return;
}
try
{
//生成搜索SQL和提示信息
var (sql, notFoundMessage) = this.BuildSearchSql(searchText);
//执行查询并显示结果
var dt = this._db.GetDataTable(sql, "search_result", false);
this.DisplaySearchResults(dt, notFoundMessage);
}
catch (Exception ex)
{
Utils.Tip($"搜索出错:\r\n{ex.Message}");
}
}
/// <summary>
/// 验证搜索条件
/// </summary>
/// <param name="searchText">输出搜索文本</param>
/// <returns>是否验证通过</returns>
private bool ValidateSearchConditions(out string searchText)
{
searchText = string.Empty;
//检查数据库连接
if (this._db == null || !this._db.ConnectionTest())
{
Utils.Tip("数据库链接无效,请选择有效链接!");
return false;
}
//获取并验证搜索关键字
searchText = this.tbSearch.Text.Trim();
if (string.IsNullOrEmpty(searchText))
{
Utils.Tip("请输入搜索关键字!");
return false;
}
return true;
}
/// <summary>
/// 构建搜索SQL
/// </summary>
/// <param name="searchText">搜索关键字</param>
/// <returns>SQL语句和未找到时的提示信息</returns>
private (string sql, string notFoundMessage) BuildSearchSql(string searchText)
{
bool searchDesc = this.ckbSearchDesc.Checked;
if (this.radBtnTable.Checked)
{
return this.BuildTableSearchSql(searchText, searchDesc);
}
else if (this.radBtnColumn.Checked)
{
return this.BuildColumnSearchSql(searchText, searchDesc);
}
return (string.Empty, string.Empty);
}
/// <summary>
/// 构建表搜索SQL
/// </summary>
/// <param name="searchText">搜索关键字</param>
/// <param name="searchDesc">是否搜索描述</param>
/// <returns>SQL语句和未找到时的提示信息</returns>
private (string sql, string notFoundMessage) BuildTableSearchSql(string searchText, bool searchDesc)
{
if (searchDesc)
{
var sql = $@"
SELECT
a.name
FROM sysobjects a
LEFT JOIN sys.extended_properties b ON a.id = b.major_id AND b.minor_id = 0
WHERE a.xtype = 'U'
AND CONVERT(VARCHAR(500), b.value) LIKE '%{searchText}%'
ORDER BY a.name";
return (sql, $"未找到描述包含'{searchText}'的表!");
}
else
{
var sql = $"SELECT name FROM sys.tables WHERE name LIKE '%{searchText}%' ORDER BY name";
return (sql, $"未找到包含'{searchText}'的表!");
}
}
/// <summary>
/// 构建列搜索SQL
/// </summary>
/// <param name="searchText">搜索关键字</param>
/// <param name="searchDesc">是否搜索描述</param>
/// <returns>SQL语句和未找到时的提示信息</returns>
private (string sql, string notFoundMessage) BuildColumnSearchSql(string searchText, bool searchDesc)
{
if (searchDesc)
{
var sql = $@"
SELECT DISTINCT
OBJECT_NAME(a.id) + '.' + CONVERT(VARCHAR(100), a.name) AS name
FROM dbo.syscolumns a
INNER JOIN dbo.sysobjects b ON b.id = a.id AND b.xtype = 'U' AND b.name <> 'dtproperties'
LEFT JOIN sys.extended_properties d ON d.major_id = b.id AND d.minor_id = a.colid
WHERE CONVERT(VARCHAR(500), ISNULL(d.[value],'')) LIKE '%{searchText}%'
AND CONVERT(VARCHAR(500), ISNULL(d.[value],'')) <> ''
ORDER BY name";
return (sql, $"未找到描述包含'{searchText}'的列!");
}
else
{
var sql = $@"
SELECT DISTINCT
OBJECT_NAME(c.object_id) + '.' + c.name AS name
FROM sys.columns c
INNER JOIN sys.tables t ON c.object_id = t.object_id
WHERE c.name LIKE '%{searchText}%'
ORDER BY name";
return (sql, $"未找到包含'{searchText}'的列!");
}
}
/// <summary>
/// 显示搜索结果
/// </summary>
/// <param name="dt">查询结果数据表</param>
/// <param name="notFoundMessage">未找到时的提示信息</param>
private void DisplaySearchResults(DataTable dt, string notFoundMessage)
{
//清空结果列表
this.lstResult.Items.Clear();
if (dt.Rows.Count > 0)
{
//填充搜索结果
foreach (DataRow row in dt.Rows)
{
this.lstResult.Items.Add(row["name"].ToString());
}
}
else
{
Utils.Tip(notFoundMessage);
}
}
#endregion
} }
} }
...@@ -162,11 +162,10 @@ namespace Tools.UI ...@@ -162,11 +162,10 @@ namespace Tools.UI
private void InitDefaultDbLink() private void InitDefaultDbLink()
{ {
//读取配置信息 //读取配置信息
var dtSetting = new DataTable("AppSetting"); var dicConfig = Utils.ReadSysConfigAsDictionary();
dtSetting.ReadXml(Utils.SysConfigFilePath); if (!dicConfig.ContainsKey(ConfigType.DefaultLink)) return;
var dicConfig = dtSetting.Rows.Cast<DataRow>().ToDictionary(x => x["Name"].ToString(), x => x["Value"].ToString());
//初始化数据库链接 //初始化数据库链接
var link = dicConfig["DefaultLink"]; var link = dicConfig[ConfigType.DefaultLink];
if (!string.IsNullOrEmpty(link)) if (!string.IsNullOrEmpty(link))
{ {
this.tstbLinkString.Text = Utils.GetDbItemModel(link).ToString(); this.tstbLinkString.Text = Utils.GetDbItemModel(link).ToString();
......
...@@ -148,7 +148,8 @@ namespace Tools.UI ...@@ -148,7 +148,8 @@ namespace Tools.UI
//初始化列属性 //初始化列属性
ds.Tables[0].Columns.Cast<DataColumn>().ToList() ds.Tables[0].Columns.Cast<DataColumn>().ToList()
.ForEach(col => { .ForEach(col =>
{
bool isKey = ds.Tables[0].PrimaryKey.Contains(col); bool isKey = ds.Tables[0].PrimaryKey.Contains(col);
var dr = result.Tables[0].NewRow(); var dr = result.Tables[0].NewRow();
dr["Name"] = col.ColumnName; dr["Name"] = col.ColumnName;
...@@ -289,7 +290,8 @@ ORDER BY b.column_id;"; ...@@ -289,7 +290,8 @@ ORDER BY b.column_id;";
var sqlsNode = xmlDoc.CreateElement("Sqls"); var sqlsNode = xmlDoc.CreateElement("Sqls");
string strKey = _ds.Tables[0].Columns[0].ToString(); //首列一般主键列 string strKey = _ds.Tables[0].Columns[0].ToString(); //首列一般主键列
string keyWhere = $" {strKey}=@{strKey} "; string keyWhere = $" {strKey}=@{strKey} ";
var columnList = this._ds.Tables[0].Columns.Cast<DataColumn>().Select(c => c.ColumnName).ToList(); var columnList = this._ds.Tables[0].Columns.Cast<DataColumn>().Where(c => !_ds.Tables[0].PrimaryKey.Contains(c)).Select(c => c.ColumnName).ToList();
#region SelectObject #region SelectObject
//SQL配置基本设置 //SQL配置基本设置
...@@ -311,6 +313,7 @@ ORDER BY b.column_id;"; ...@@ -311,6 +313,7 @@ ORDER BY b.column_id;";
//生成参数 //生成参数
foreach (DataColumn dc in _ds.Tables[0].Columns) foreach (DataColumn dc in _ds.Tables[0].Columns)
{ {
if (_ds.Tables[0].PrimaryKey.Contains(dc)) continue; //新增的时候不需要主键列
this.AddParamNode(xmlDoc, sqlNode, dc.ColumnName); this.AddParamNode(xmlDoc, sqlNode, dc.ColumnName);
} }
......
namespace Tools namespace Tools
{ {
partial class wMain partial class wMain
{ {
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
this.splitContainer1 = new System.Windows.Forms.SplitContainer(); this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.listView1 = new System.Windows.Forms.ListView(); this.listView1 = new System.Windows.Forms.ListView();
this.imageList1 = new System.Windows.Forms.ImageList(this.components); this.imageList1 = new System.Windows.Forms.ImageList(this.components);
this.btnToggleMenu = new System.Windows.Forms.Button();
this.menuStrip1 = new System.Windows.Forms.MenuStrip(); this.menuStrip1 = new System.Windows.Forms.MenuStrip();
this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.tsmiSysUpload = new System.Windows.Forms.ToolStripMenuItem(); this.tsmiSysUpload = new System.Windows.Forms.ToolStripMenuItem();
...@@ -107,6 +108,7 @@ ...@@ -107,6 +108,7 @@
// splitContainer1.Panel1 // splitContainer1.Panel1
// //
this.splitContainer1.Panel1.Controls.Add(this.listView1); this.splitContainer1.Panel1.Controls.Add(this.listView1);
this.splitContainer1.Panel1.Controls.Add(this.btnToggleMenu);
this.splitContainer1.Panel1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.splitContainer1.Panel1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
// //
// splitContainer1.Panel2 // splitContainer1.Panel2
...@@ -123,7 +125,7 @@ ...@@ -123,7 +125,7 @@
this.listView1.LargeImageList = this.imageList1; this.listView1.LargeImageList = this.imageList1;
this.listView1.Location = new System.Drawing.Point(0, 0); this.listView1.Location = new System.Drawing.Point(0, 0);
this.listView1.Name = "listView1"; this.listView1.Name = "listView1";
this.listView1.Size = new System.Drawing.Size(200, 369); this.listView1.Size = new System.Drawing.Size(200, 349);
this.listView1.SmallImageList = this.imageList1; this.listView1.SmallImageList = this.imageList1;
this.listView1.StateImageList = this.imageList1; this.listView1.StateImageList = this.imageList1;
this.listView1.TabIndex = 0; this.listView1.TabIndex = 0;
...@@ -139,6 +141,23 @@ ...@@ -139,6 +141,23 @@
this.imageList1.Images.SetKeyName(3, "51_工作群组.png"); this.imageList1.Images.SetKeyName(3, "51_工作群组.png");
this.imageList1.Images.SetKeyName(4, "60_空间.png"); this.imageList1.Images.SetKeyName(4, "60_空间.png");
// //
// btnToggleMenu
//
this.btnToggleMenu.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(41)))), ((int)(((byte)(101)))), ((int)(((byte)(204)))));
this.btnToggleMenu.Dock = System.Windows.Forms.DockStyle.Bottom;
this.btnToggleMenu.FlatAppearance.BorderSize = 0;
this.btnToggleMenu.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnToggleMenu.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnToggleMenu.ForeColor = System.Drawing.Color.White;
this.btnToggleMenu.Location = new System.Drawing.Point(0, 349);
this.btnToggleMenu.Margin = new System.Windows.Forms.Padding(0);
this.btnToggleMenu.Name = "btnToggleMenu";
this.btnToggleMenu.Size = new System.Drawing.Size(200, 20);
this.btnToggleMenu.TabIndex = 1;
this.btnToggleMenu.Text = "<";
this.btnToggleMenu.UseVisualStyleBackColor = false;
this.btnToggleMenu.Click += new System.EventHandler(this.btnToggleMenu_Click);
//
// menuStrip1 // menuStrip1
// //
this.menuStrip1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(234)))), ((int)(((byte)(245)))), ((int)(((byte)(255))))); this.menuStrip1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(234)))), ((int)(((byte)(245)))), ((int)(((byte)(255)))));
...@@ -612,5 +631,6 @@ ...@@ -612,5 +631,6 @@
private System.Windows.Forms.Label lbBrief; private System.Windows.Forms.Label lbBrief;
private System.Windows.Forms.Label label9; private System.Windows.Forms.Label label9;
private System.Windows.Forms.ToolStripMenuItem tsmiShowFetetoWork; private System.Windows.Forms.ToolStripMenuItem tsmiShowFetetoWork;
private System.Windows.Forms.Button btnToggleMenu;
} }
} }
\ No newline at end of file
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel;
using System.Data; using System.Data;
using System.Diagnostics; using System.Diagnostics;
using System.Drawing; using System.Drawing;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
// //
...@@ -32,6 +30,14 @@ namespace Tools ...@@ -32,6 +30,14 @@ namespace Tools
/// 数据库访问对象 /// 数据库访问对象
/// </summary> /// </summary>
DBHelper _db = null; DBHelper _db = null;
/// <summary>
/// 左侧菜单原始宽度
/// </summary>
private int OriginalMenuWidth = 200;
/// <summary>
/// 左侧菜单是否已折叠
/// </summary>
private bool IsMenuCollapsed = false;
public wMain() public wMain()
{ {
...@@ -59,6 +65,8 @@ namespace Tools ...@@ -59,6 +65,8 @@ namespace Tools
} }
private void WMain_Shown(object sender, EventArgs e) private void WMain_Shown(object sender, EventArgs e)
{ {
//保存原始宽度
this.OriginalMenuWidth = this.splitContainer1.SplitterDistance;
//窗体拖拽事件 //窗体拖拽事件
this.Header.MouseDown += Header_MouseDown; this.Header.MouseDown += Header_MouseDown;
this.Header.MouseUp += Header_MouseUp; this.Header.MouseUp += Header_MouseUp;
...@@ -425,6 +433,18 @@ namespace Tools ...@@ -425,6 +433,18 @@ namespace Tools
UserLog.Write($"关闭模块:{page.Text}"); //日志记录 UserLog.Write($"关闭模块:{page.Text}"); //日志记录
this.OpenedList.Remove(page.Text); //移除列表 this.OpenedList.Remove(page.Text); //移除列表
this.tabControl1.TabPages.Remove(page); //移除页面 this.tabControl1.TabPages.Remove(page); //移除页面
//先关闭并释放窗体
if (page.Controls.Count > 0)
{
var frm = page.Controls[0] as Form;
if (frm != null)
{
frm.Close(); //触发FormClosing事件
frm.Dispose(); //释放窗体资源
}
}
page.Dispose(); //释放页面 page.Dispose(); //释放页面
} }
} }
...@@ -451,13 +471,44 @@ namespace Tools ...@@ -451,13 +471,44 @@ namespace Tools
#endregion #endregion
#region 扩展:折叠/展开左侧菜单
/// <summary>
/// 折叠/展开按钮点击事件
/// </summary>
private void btnToggleMenu_Click(object sender, EventArgs e)
{
this.ToggleMenu();
}
/// <summary>
/// 切换菜单折叠/展开状态
/// </summary>
private void ToggleMenu()
{
// 切换状态
this.IsMenuCollapsed = !this.IsMenuCollapsed;
// 使用三元运算符简化状态切换
this.splitContainer1.SplitterDistance = this.IsMenuCollapsed ? 20 : this.OriginalMenuWidth;
this.btnToggleMenu.Text = this.IsMenuCollapsed ? ">" : "<";
// 强制刷新按钮显示
this.btnToggleMenu.PerformLayout();
this.btnToggleMenu.Refresh();
}
#endregion
#region 扩展:使用内存展示 #region 扩展:使用内存展示
//定时器:默认开启,间隔1秒 //定时器:默认开启,间隔1秒
private void timer1_Tick(object sender, EventArgs e) private void timer1_Tick(object sender, EventArgs e)
{ {
var p = Process.GetCurrentProcess(); var p = Process.GetCurrentProcess();
var MB = (p.WorkingSet64 / 1024 / 1024); // 使用PrivateMemorySize64获取进程独占的内存,与任务管理器显示一致
// WorkingSet64 包含共享内存,通常比实际占用大
var MB = (p.PrivateMemorySize64 / 1024 / 1024);
this.AsyncUI(() => { this.AsyncUI(() => {
this.lbSysMemery.Text = $"{MB}M"; this.lbSysMemery.Text = $"{MB}M";
}); });
......
...@@ -125,7 +125,7 @@ ...@@ -125,7 +125,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD0
EgAAAk1TRnQBSQFMAgEBBQEAARABAQEQAQEBIAEAASABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo EgAAAk1TRnQBSQFMAgEBBQEAASgBAQEoAQEBIAEAASABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABgAMAAUADAAEBAQABCAYAASAYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AwABgAMAAUADAAEBAQABCAYAASAYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment