Files
lserp_cs_6.0/插件库/Lskj.Control/FrmAddDynamic.cs
T
cyf ab56a9bcf7 基线 SVN r240
SVN-Revision: r240
2025-02-06 06:46:06 +00:00

346 lines
15 KiB
C#

using DevExpress.XtraGrid.Columns;
using Lskj.Business.Impl;
using Lskj.Control.Model;
using Lskj.Core;
using Lskj.Data;
using Lskj.Model;
using Lskj.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Lskj.Control
{
public partial class FrmAddDynamic : BaseForm
{
#region 变量
/// <summary>
/// 动态sql
/// </summary>
public string DynamicSql;
/// <summary>
/// 模块编号
/// </summary>
public string ModuleCode;
/// <summary>
/// 最大高度
/// </summary>
public int MaxHeight;
/// <summary>
/// 预加载模块的关联字段
/// </summary>
public string UnionKey;
/// <summary>
/// 预加载模块的关联字段
/// </summary>
public string UnionValue;
/// <summary>
/// 主键值
/// </summary>
public string ParmaryKey;
/// <summary>
/// 主模块对象
/// </summary>
public ModuleModel MainModuleObj;
/// <summary>
/// guid主键值
/// </summary>
public string keyValue;
/// <summary>
/// 主表表格属性
/// </summary>
public DataTable TableProperties;
/// <summary>
/// 是否为新增
/// </summary>
public bool IsAdd = false;
/// <summary>
/// 是否已点击保存
/// </summary>
public bool IsSave = false;
#endregion
public FrmAddDynamic()
{
InitializeComponent();
this.Load += OnFrmAddDynamicLoad;
this.btnUpdate.Click += OnBtnUpdateClick;
this.btnClose.Click += OnBtnCloseClick;
this.FormClosing += OnFrmAddDynamicFormClosing;
}
/// <summary>
/// 初始化时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnFrmAddDynamicLoad(object sender, EventArgs e)
{
WaitForm.ShowForm();
try
{
this.MainModuleObj = new ModuleModel(MainImpl.GetSystemdllTab(ModuleCode));
if (MainModuleObj == null)
{
throw new Exception(string.Format("初始化模块{0}失败", ModuleCode));
}
TableProperties = BaseImpl.GetDataTableResult(string.Format("select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH from information_schema.columns where table_name = '{0}'", MainModuleObj.MenuTable));
if (string.IsNullOrEmpty(keyValue))
{
IsAdd = true;
InsertDynamicTab();
}
InsertConotrol();
SetFormSize();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
WaitForm.HideForm();
}
/// <summary>
/// 修改按钮点击时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnBtnUpdateClick(object sender, EventArgs e)
{
WaitForm.ShowForm(ResourceKeys.DataSaving);
try
{
// 保存之前先进行表格更新
this.gcMain.GridView.PostEditor();
this.gcMain.GridView.UpdateCurrentRow();
if (this.gcMain.VerifyNull())
{
string updateSql = GetDetailRecord().ToString();
SqlHelper.ExecuteNonQuery(updateSql);
IsSave = true;
MessageUtil.Show("修改成功");
}
}
catch (Exception ex)
{
MessageUtil.Show(ex.Message);
}
WaitForm.HideForm();
}
/// <summary>
/// 退出按钮点击时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnBtnCloseClick(object sender, EventArgs e)
{
this.Close();
}
/// <summary>
/// 关闭窗体时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnFrmAddDynamicFormClosing(object sender, FormClosingEventArgs e)
{
if (IsAdd && !IsSave)//新增且未保存删除插入的数据
{
string deleteSql = string.Format("delete from {0} where keyvalue = '{1}'", this.MainModuleObj.MenuTable, keyValue);
SqlHelper.ExecuteNonQuery(deleteSql);
}
this.DialogResult = DialogResult.OK;
}
/// <summary>
/// <para>说明:通过模块加载预载界面列</para>
/// <para>创建人:王一帆</para>
/// <para>创建日期:2023-10-20 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
private void InsertConotrol()
{
//表格样式设置
gcMain.GridView.Appearance.HeaderPanel.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;//表头居中
gcMain.GridView.Appearance.Row.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;//内容居中
this.ParmaryKey = BaseImpl.GetBasePrimaryKey(ModuleCode);//获取主键
DataTable GridColumns = BaseModuleImpl.GetBaseGridColumns(ModuleCode);
DataTable GridAllColumns = BaseModuleImpl.GetBaseGridAllColumns(ModuleCode);
this.gcMain.SetEditColumns(GridColumns);
string MainSql = string.Format("select * from {0} where keyvalue = '{1}'", this.MainModuleObj.MenuTable, keyValue);
this.gcMain.SetGridViewDataSource(SqlHelper.ExecuteDataTable(MainSql));
}
/// <summary>
/// <para>说明:添加模板表数据</para>
/// <para>创建人:唐德馨</para>
/// <para>创建日期:2023-10-20 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
private void InsertDynamicTab()
{
try
{
string dynamicSql = ReplaceHelper.ReplaceUserInfo(DynamicSql);
DataTable dynamicTab = SqlHelper.ExecuteDataTable(dynamicSql);
if (dynamicTab != null)
{
this.keyValue = Guid.NewGuid().ToString();
string dateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
StringBuilder addSqlStrBuilder = new StringBuilder();
foreach (DataRow dynamicRow in dynamicTab.Rows)
{
StringBuilder addKeysBuilder = new StringBuilder();
StringBuilder addValuesBuilder = new StringBuilder();
foreach (DataColumn dynamicCol in dynamicTab.Columns)
{
if (TableProperties.Select().Where(n => (n["COLUMN_NAME"] + "").Equals(dynamicCol.ColumnName, StringComparison.OrdinalIgnoreCase)).Count() == 0)
continue;
if (dynamicCol.ColumnName.Equals("id", StringComparison.OrdinalIgnoreCase) ||
dynamicCol.ColumnName.Equals("keyvalue", StringComparison.OrdinalIgnoreCase) ||
dynamicCol.ColumnName.Equals("operatedate", StringComparison.OrdinalIgnoreCase) ||
dynamicCol.ColumnName.Equals("operatorname", StringComparison.OrdinalIgnoreCase) ||
dynamicCol.ColumnName.Equals(UnionKey, StringComparison.OrdinalIgnoreCase))
{
continue;
}
addKeysBuilder.Append(string.Format("{0},", dynamicCol.ColumnName));
addValuesBuilder.Append(string.Format("'{0}',", (dynamicRow[dynamicCol] + "").Replace("'", "''")));
}
if (!string.IsNullOrEmpty(UnionKey))
{
addKeysBuilder.Append(UnionKey + ",");
addValuesBuilder.Append(string.Format("'{0}',", UnionValue));
}
addKeysBuilder.Append("keyvalue,");
addValuesBuilder.Append(string.Format("'{0}',", keyValue));
addKeysBuilder.Append("operatedate,");
addValuesBuilder.Append(string.Format("'{0}',", dateTime));
addKeysBuilder.Append("operatorname,");
addValuesBuilder.Append(string.Format("'{0}',", ERPInfo.Instance.UserName));
addSqlStrBuilder.Append(string.Format("insert into {0} ({1}) values ({2});", MainModuleObj.MenuTable, addKeysBuilder.ToString().TrimEnd(','), addValuesBuilder.ToString().TrimEnd(',')));
}
string execSql = addSqlStrBuilder.ToString();
if (!string.IsNullOrEmpty(execSql))
{
SqlHelper.ExecuteNonQuery(execSql);
}
}
}
catch (Exception ex)
{
MessageUtil.Show(ex.Message);
}
}
/// <summary>
/// <para>说明:获取保存数据</para>
/// <para>创建人:唐德馨</para>
/// <para>创建日期:2023-10-20 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <returns>System.String.</returns>
private StringBuilder GetDetailRecord()
{
StringBuilder updateBuilder = new StringBuilder();
DataTable mainTable = this.gcMain.GridControl.DataSourceTable().TrimDeleteRows();
if (mainTable.Rows.Count > 0)
{
foreach (DataRow dataRow in mainTable.Rows)
{
StringBuilder updateKeyValues = new StringBuilder();
string id = "";
string keyvalue = "";
foreach (DataColumn item in mainTable.Columns)
{
GridColumn[] gridColumns = gcMain.GridView.Columns.Cast<GridColumn>().Where(x => x.FieldName.Equals(item.Caption, StringComparison.OrdinalIgnoreCase)).ToArray();
if (item.Caption.Equals("id", StringComparison.OrdinalIgnoreCase))
{
id = dataRow["id"] + "";
continue;
}
if (item.Caption.Equals("keyvalue", StringComparison.OrdinalIgnoreCase))
{
keyvalue = dataRow["keyvalue"] + "";
continue;
}
if (gridColumns.Count() == 0) continue;
string fieldValue = dataRow.Table.Columns.Contains(item.ColumnName) ? dataRow[item.ColumnName] + "" : string.Empty;
if (!string.IsNullOrWhiteSpace(fieldValue))
{
fieldValue = item.DataType == typeof(DateTime) ? Convert.ToDateTime(fieldValue).ToString("yyyy-MM-dd HH:mm:ss") : fieldValue.Contains("'") ? fieldValue.Replace("'", "''") : fieldValue;
}
else
{
if (item.DataType == typeof(Decimal) ||
item.DataType == typeof(Double) ||
item.DataType == typeof(Int16) ||
item.DataType == typeof(Int32) ||
item.DataType == typeof(Int64))
fieldValue = "0";
else if (item.DataType == typeof(DateTime))
{
fieldValue = "null";
}
else
{
fieldValue = "";
}
}
updateKeyValues.Append(string.Format("{0} = '{1}',", item.ColumnName, fieldValue));
}
updateBuilder.Append(string.Format("update {0} set {1} where id = '{2}' and keyvalue = '{3}';", MainModuleObj.MenuTable, updateKeyValues.ToString().TrimEnd(','), id, keyvalue));
}
}
return updateBuilder;
}
/// <summary>
/// 调整窗体大小
/// </summary>
private void SetFormSize()
{
this.gcMain.GridView.HorzScrollVisibility = DevExpress.XtraGrid.Views.Base.ScrollVisibility.Never;
this.gcMain.GridView.VertScrollVisibility = DevExpress.XtraGrid.Views.Base.ScrollVisibility.Never;
this.gcMain.GridView.OptionsView.RowAutoHeight = false;
this.gcMain.GridView.FooterPanelHeight = 25;
this.gcMain.GridView.ViewCaptionHeight = 25;
this.gcMain.GridView.RowHeight = MaxHeight > 25 ? MaxHeight : 25;
int width = this.gcMain.GridView.IndicatorWidth;
foreach (GridColumn gridColumn in this.gcMain.GridView.VisibleColumns)
{
//gridColumn.MaxWidth = gridColumn.Width;
//gridColumn.MinWidth = gridColumn.Width;
width += gridColumn.Width;
}
int height = this.gcMain.GridView.RowCount * this.gcMain.GridView.RowHeight + 75 + this.gcMain.plbuttomObj.Height + this.gcMain.plbuttomObj.Height - 13;
if (height > System.Windows.Forms.Screen.GetWorkingArea(this).Height)
{
height = System.Windows.Forms.Screen.GetWorkingArea(this).Height;
this.gcMain.GridView.VertScrollVisibility = DevExpress.XtraGrid.Views.Base.ScrollVisibility.Always;
}
else if (height < System.Windows.Forms.Screen.GetWorkingArea(this).Height)
{
this.gcMain.GridView.VertScrollVisibility = DevExpress.XtraGrid.Views.Base.ScrollVisibility.Never;
}
if (this.gcMain.GridView.VertScrollVisibility == DevExpress.XtraGrid.Views.Base.ScrollVisibility.Always)
{
width = width + 30;
}
this.Size = new Size(width, height);
int screenTop = (System.Windows.Forms.Screen.GetWorkingArea(this).Width - this.Width) / 2;
int screenLeft = (System.Windows.Forms.Screen.GetWorkingArea(this).Height - this.Height) / 2;
if (this.WindowState == FormWindowState.Normal)
{
this.Location = new Point(screenTop, screenLeft);
}
}
}
}