ab56a9bcf7
SVN-Revision: r240
346 lines
15 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|