Commit 43222620 authored by tr's avatar tr

1、代码优化:将基础信息绑定提升为基础能力

parent 2696ee42
...@@ -6,6 +6,48 @@ using System.Threading.Tasks; ...@@ -6,6 +6,48 @@ using System.Threading.Tasks;
namespace Tools.MyCommon namespace Tools.MyCommon
{ {
/*
* Info : 全局的基础信息
*/
/// <summary>
/// 模块信息:菜单渲染时使用
/// </summary>
public class ModuleInfo
{
/// <summary>
/// 窗体对象
/// </summary>
public Type ViewFormType { get; set; }
/// <summary>
/// 显示名称
/// </summary>
public string Text { get; set; }
/// <summary>
/// 提示内容
/// </summary>
public string ToolTipText { get; set; }
}
/// <summary>
/// 绑定信息
/// </summary>
public class BindInfo
{
/// <summary>
/// 绑定的数据源列名称
/// </summary>
public string ColumnName { get; set; }
/// <summary>
/// 绑定的控件属性名称
/// </summary>
public string PropertyName { get; set; }
}
/*
* Type:为部分模块提供相对规范的类型区分
*/
/// <summary> /// <summary>
/// 配置类型 /// 配置类型
/// </summary> /// </summary>
...@@ -46,22 +88,5 @@ namespace Tools.MyCommon ...@@ -46,22 +88,5 @@ namespace Tools.MyCommon
/// </summary> /// </summary>
public static string Doc => "Doc"; public static string Doc => "Doc";
} }
/// <summary>
/// 模块信息
/// </summary>
public class ModuleInfo
{
/// <summary>
/// 窗体对象
/// </summary>
public Type ViewFormType { get; set; }
/// <summary>
/// 显示名称
/// </summary>
public string Text { get; set; }
/// <summary>
/// 提示内容
/// </summary>
public string ToolTipText { get; set; }
}
} }
...@@ -123,6 +123,7 @@ namespace Tools.MyCommon ...@@ -123,6 +123,7 @@ namespace Tools.MyCommon
return true; return true;
} }
#region 结束编辑
/// <summary> /// <summary>
/// 基本信息-结束编辑 /// 基本信息-结束编辑
...@@ -180,5 +181,80 @@ namespace Tools.MyCommon ...@@ -180,5 +181,80 @@ namespace Tools.MyCommon
} }
} }
} }
#endregion
#region 数据绑定
/// <summary>
/// 绑定基础信息
/// </summary>
/// <param name="parent"></param>
/// <param name="drv"></param>
public void BindBaseInfo(Control parent, DataRowView drv)
{
foreach (Control c in parent?.Controls)
{
if (c is TextBox)
{
this.Binding(c as TextBox, drv);
}
else if (c is CheckBox)
{
this.Binding(c as CheckBox, drv);
}
}
}
/// <summary>
/// 设置控件绑定信息
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="c"></param>
/// <param name="drv"></param>
private void Binding<T>(T c, DataRowView drv) where T : Control
{
//获取绑定信息
var bind = this.GetBindingInfo(c);
//数据源是否包含该列
var field = bind.ColumnName;
if (!drv.Row.Table.Columns.Contains(field))
return;
//布尔特殊处理
if (drv[field] == DBNull.Value && drv.Row.Table.Columns[field].DataType.Name.Equals("Boolean"))
drv[field] = false;
//设置绑定
var property = bind.PropertyName;
c.DataBindings.Clear();
c.DataBindings.Add(property, drv, field);
}
/// <summary>
/// 获取绑定属性名称
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="c"></param>
/// <returns></returns>
private BindInfo GetBindingInfo<T>(T c) where T : Control
{
var property = "";
var column = "";
if (c is TextBox)
{
property = "Text";
column = c.Name.Substring(2);
}
else if (c is CheckBox)
{
property = "Checked";
column = c.Name.Substring(2);
}
return new BindInfo() { ColumnName = column, PropertyName = property };
}
#endregion
} }
} }
...@@ -43,12 +43,10 @@ namespace Tools.UI ...@@ -43,12 +43,10 @@ namespace Tools.UI
#endregion #endregion
public wModuleManager() public wModuleManager()
{ {
InitializeComponent(); InitializeComponent();
} }
private void wModuleManager_Load(object sender, EventArgs e) private void wModuleManager_Load(object sender, EventArgs e)
{ {
//工具栏事件 //工具栏事件
...@@ -144,61 +142,6 @@ namespace Tools.UI ...@@ -144,61 +142,6 @@ namespace Tools.UI
Utils.Tip(result, 800, 600); Utils.Tip(result, 800, 600);
} }
/// <summary>
/// 生成表格Insert语句
/// </summary>
/// <param name="rows"></param>
/// <returns></returns>
private string GenInsertSQL(params DataRow[] rows)
{
if (rows == null || rows.Length == 0)
return "";
//
var dt = rows[0].Table;
var colist = this.GetTableColumns(dt);
var values = rows.Select(r => this.GenValues(r, colist));
var result = $"INSERT INTO {dt.TableName}\r\n\t{this.GenColumns(colist)}\r\nVALUES\r\n\t{string.Join(",\r\n\t", values)}";
return result;
}
/// <summary>
/// 生成列集合
/// </summary>
/// <param name="colist"></param>
/// <returns></returns>
private string GenColumns(List<string> colist)
{
return $"([{string.Join("], [", colist)}])";
}
/// <summary>
/// 生成值集合
/// </summary>
/// <param name="dr"></param>
/// <param name="colist"></param>
/// <returns></returns>
private string GenValues(DataRow dr, List<string> colist)
{
var valist = colist.Select(col => col.ToLower().Equals("modelid") ? "@ModelID" : $"'{dr[col].ToString()}'");
return $"({string.Join(", ", valist)})";
}
/// <summary>
/// 获取有效列(非自增列)
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
private List<string> GetTableColumns(DataTable dt)
{
var result = new List<string>();
dt.Columns.Cast<DataColumn>().ToList()
.ForEach(c => {
if (!c.AutoIncrement)
{
result.Add(c.ColumnName);
}
});
return result;
}
#endregion #endregion
#region 上下文菜单事件 #region 上下文菜单事件
...@@ -268,7 +211,7 @@ namespace Tools.UI ...@@ -268,7 +211,7 @@ namespace Tools.UI
if (drv != null) if (drv != null)
{ {
//绑定基本信息 //绑定基本信息
this.BindBaseInfo(drv); this.BindBaseInfo(this.tableLayoutPanel1, drv);
//筛选明细:明细不需要重复绑定 //筛选明细:明细不需要重复绑定
this._dtDetail.DefaultView.RowFilter = $"ModelID = {ModelID}"; this._dtDetail.DefaultView.RowFilter = $"ModelID = {ModelID}";
} }
...@@ -447,63 +390,62 @@ namespace Tools.UI ...@@ -447,63 +390,62 @@ namespace Tools.UI
} }
#endregion #endregion
#region 数据绑定 #region SQL生成相关
/// <summary> /// <summary>
/// 绑定基本信息 /// 生成表格Insert语句
/// </summary> /// </summary>
/// <param name="drv"></param> /// <param name="rows"></param>
private void BindBaseInfo(DataRowView drv) /// <returns></returns>
private string GenInsertSQL(params DataRow[] rows)
{ {
foreach (Control c in this.tableLayoutPanel1.Controls) if (rows == null || rows.Length == 0)
{ return "";
if (c is TextBox) //
{ var dt = rows[0].Table;
this.Binding(c as TextBox, drv); var colist = this.GetTableColumns(dt);
} var values = rows.Select(r => this.GenValues(r, colist));
else if (c is CheckBox) var result = $"INSERT INTO {dt.TableName}\r\n\t{this.GenColumns(colist)}\r\nVALUES\r\n\t{string.Join(",\r\n\t", values)}";
{ return result;
this.Binding(c as CheckBox, drv); }
} /// <summary>
} /// 生成列集合
/// </summary>
/// <param name="colist"></param>
/// <returns></returns>
private string GenColumns(List<string> colist)
{
return $"([{string.Join("], [", colist)}])";
} }
/// <summary> /// <summary>
/// 设置控件绑定信息 /// 生成值集合
/// </summary> /// </summary>
/// <typeparam name="T"></typeparam> /// <param name="dr"></param>
/// <param name="c"></param> /// <param name="colist"></param>
/// <param name="drv"></param> /// <returns></returns>
private void Binding<T>(T c, DataRowView drv) where T : Control private string GenValues(DataRow dr, List<string> colist)
{ {
//数据源是否包含该列 var valist = colist.Select(col => col.ToLower().Equals("modelid") ? "@ModelID" : $"'{dr[col].ToString()}'");
var field = c.Name.Substring(2); //去掉前缀 return $"({string.Join(", ", valist)})";
if (!drv.Row.Table.Columns.Contains(field))
return;
//布尔特殊处理
if (drv[field] == DBNull.Value && drv.Row.Table.Columns[field].DataType.Name.Equals("Boolean"))
drv[field] = false;
//设置绑定
var property = this.GetPropertyName(c);
c.DataBindings.Clear();
c.DataBindings.Add(property, drv, field);
} }
/// <summary> /// <summary>
/// 获取绑定属性名称 /// 获取有效列(非自增列)
/// </summary> /// </summary>
/// <typeparam name="T"></typeparam> /// <param name="dt"></param>
/// <param name="c"></param>
/// <returns></returns> /// <returns></returns>
private string GetPropertyName<T>(T c) where T : Control private List<string> GetTableColumns(DataTable dt)
{ {
var result = ""; var result = new List<string>();
if (c is TextBox) dt.Columns.Cast<DataColumn>().ToList()
result = "Text"; .ForEach(c => {
else if (c is CheckBox) if (!c.AutoIncrement)
result = "Checked"; {
result.Add(c.ColumnName);
}
});
return result; return result;
} }
#endregion #endregion
#region 便捷操作:字符串ID-自动生成 #region 便捷操作:字符串ID-自动生成
......
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