Commit 43222620 authored by tr's avatar tr

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

parent 2696ee42
......@@ -6,6 +6,48 @@ using System.Threading.Tasks;
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>
......@@ -46,22 +88,5 @@ namespace Tools.MyCommon
/// </summary>
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
return true;
}
#region 结束编辑
/// <summary>
/// 基本信息-结束编辑
......@@ -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
#endregion
public wModuleManager()
{
InitializeComponent();
}
private void wModuleManager_Load(object sender, EventArgs e)
{
//工具栏事件
......@@ -144,61 +142,6 @@ namespace Tools.UI
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
#region 上下文菜单事件
......@@ -268,7 +211,7 @@ namespace Tools.UI
if (drv != null)
{
//绑定基本信息
this.BindBaseInfo(drv);
this.BindBaseInfo(this.tableLayoutPanel1, drv);
//筛选明细:明细不需要重复绑定
this._dtDetail.DefaultView.RowFilter = $"ModelID = {ModelID}";
}
......@@ -447,63 +390,62 @@ namespace Tools.UI
}
#endregion
#region 数据绑定
#region SQL生成相关
/// <summary>
/// 绑定基本信息
/// 生成表格Insert语句
/// </summary>
/// <param name="drv"></param>
private void BindBaseInfo(DataRowView drv)
{
foreach (Control c in this.tableLayoutPanel1.Controls)
{
if (c is TextBox)
/// <param name="rows"></param>
/// <returns></returns>
private string GenInsertSQL(params DataRow[] rows)
{
this.Binding(c as TextBox, drv);
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;
}
else if (c is CheckBox)
/// <summary>
/// 生成列集合
/// </summary>
/// <param name="colist"></param>
/// <returns></returns>
private string GenColumns(List<string> colist)
{
this.Binding(c as CheckBox, drv);
}
}
return $"([{string.Join("], [", colist)}])";
}
/// <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 field = c.Name.Substring(2); //去掉前缀
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);
/// <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>
/// <typeparam name="T"></typeparam>
/// <param name="c"></param>
/// <param name="dt"></param>
/// <returns></returns>
private string GetPropertyName<T>(T c) where T : Control
private List<string> GetTableColumns(DataTable dt)
{
var result = new List<string>();
dt.Columns.Cast<DataColumn>().ToList()
.ForEach(c => {
if (!c.AutoIncrement)
{
var result = "";
if (c is TextBox)
result = "Text";
else if (c is CheckBox)
result = "Checked";
result.Add(c.ColumnName);
}
});
return result;
}
#endregion
#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