SVN r616
SVN-Revision: r616
This commit is contained in:
@@ -30,6 +30,8 @@ using DevExpress.XtraBars;
|
|||||||
using System.Collections;
|
using System.Collections;
|
||||||
using Lskj.Core;
|
using Lskj.Core;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using DevExpress.Utils;
|
||||||
|
using DevExpress.Data;
|
||||||
|
|
||||||
namespace Lskj.PubAccraditation
|
namespace Lskj.PubAccraditation
|
||||||
{
|
{
|
||||||
@@ -80,6 +82,10 @@ namespace Lskj.PubAccraditation
|
|||||||
/// <param name="sender">The sender.</param>
|
/// <param name="sender">The sender.</param>
|
||||||
public event RefreshThePage refreshThePage;
|
public event RefreshThePage refreshThePage;
|
||||||
public delegate void RefreshThePage(string promptInformation, string id);
|
public delegate void RefreshThePage(string promptInformation, string id);
|
||||||
|
/// <summary>
|
||||||
|
/// 主表动态生成的日期列
|
||||||
|
/// </summary>
|
||||||
|
public List<GridColumn> DateColumnList = new List<GridColumn>();
|
||||||
#region 私有变量
|
#region 私有变量
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// id(推送记录)
|
/// id(推送记录)
|
||||||
@@ -943,6 +949,7 @@ namespace Lskj.PubAccraditation
|
|||||||
this.pl_left_top.AutoScroll = true;
|
this.pl_left_top.AutoScroll = true;
|
||||||
}
|
}
|
||||||
this.ControlObj.OnDataSourceBindCallBack += new EventHandler(OnControlObjOnDataSourceBindCallBack);
|
this.ControlObj.OnDataSourceBindCallBack += new EventHandler(OnControlObjOnDataSourceBindCallBack);
|
||||||
|
this.ControlObj.OnDataFileRefrshCallBack += OnDataFileRefrshFile;
|
||||||
this.pl_left_top.Height = this.BillModelObj.ParentHeight - 36 > this.pl_left_top.Height ? this.pl_left_top.Height : this.BillModelObj.ParentHeight;
|
this.pl_left_top.Height = this.BillModelObj.ParentHeight - 36 > this.pl_left_top.Height ? this.pl_left_top.Height : this.BillModelObj.ParentHeight;
|
||||||
//初始明细数据
|
//初始明细数据
|
||||||
this.gridBillInfo.Model = this.SysModel;
|
this.gridBillInfo.Model = this.SysModel;
|
||||||
@@ -1144,6 +1151,194 @@ namespace Lskj.PubAccraditation
|
|||||||
MessageUtil.Show(Message, ex.Message);
|
MessageUtil.Show(Message, ex.Message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// <para>说明:刷新表格列(时间)</para>
|
||||||
|
/// <para>创建人:王一帆</para>
|
||||||
|
/// <para>创建日期:2018-08-16 </para>
|
||||||
|
/// <para>修改人:</para>
|
||||||
|
/// <para>修改日期:</para>
|
||||||
|
/// <para>修改备注:</para>
|
||||||
|
/// <para>版本:1.0</para>
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
private void OnDataFileRefrshFile(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
BaseUserControl baseControl = (sender as System.Windows.Forms.Control).ToBaseUserControl();
|
||||||
|
if (baseControl is LabelDateEdit labelDateEdit)
|
||||||
|
{
|
||||||
|
DateTime dateTime = labelDateEdit.TextEdit.DateTime;
|
||||||
|
if (DateColumnList.Count == 0)
|
||||||
|
{
|
||||||
|
AddDataColumns();
|
||||||
|
}
|
||||||
|
UpdateDynamicColumns(dateTime);
|
||||||
|
OnGcMainDataSourceChanged(gridBillInfo.GridView, null);//手动刷新日期合计数据源
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private void AddDataColumns()
|
||||||
|
{
|
||||||
|
foreach (GridColumn gridColumn in gridBillInfo.GridView.Columns)
|
||||||
|
{
|
||||||
|
gridColumn.Fixed = DevExpress.XtraGrid.Columns.FixedStyle.Left;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < 7; i++)
|
||||||
|
{
|
||||||
|
GridColumn gridColumn = new GridColumn();
|
||||||
|
gridColumn.AppearanceCell.Options.UseTextOptions = true;
|
||||||
|
gridColumn.AppearanceCell.TextOptions.HAlignment = HorzAlignment.Center;
|
||||||
|
gridColumn.AppearanceHeader.Options.UseTextOptions = true;
|
||||||
|
gridColumn.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center;
|
||||||
|
gridColumn.OptionsColumn.AllowMove = false;
|
||||||
|
gridColumn.OptionsColumn.AllowSize = false;
|
||||||
|
gridColumn.OptionsFilter.AllowFilter = false;
|
||||||
|
gridColumn.OptionsColumn.AllowMerge = DefaultBoolean.False;
|
||||||
|
gridColumn.OptionsColumn.AllowSort = DefaultBoolean.False;
|
||||||
|
gridColumn.FieldName = $"DDay_{i}";
|
||||||
|
gridColumn.Width = 70;
|
||||||
|
gridColumn.DisplayFormat.FormatType = FormatType.Numeric;
|
||||||
|
gridColumn.DisplayFormat.FormatString = "{0:#,##0.####}";
|
||||||
|
gridColumn.Visible = false;
|
||||||
|
gridColumn.SummaryItem.SummaryType = SummaryItemType.Sum;
|
||||||
|
gridColumn.SummaryItem.DisplayFormat = "{0:#,##0.####}";
|
||||||
|
gridBillInfo.GridView.Columns.Add(gridColumn);
|
||||||
|
DateColumnList.Add(gridColumn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 根据日期修改列状态
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="currentDate"></param>
|
||||||
|
private void UpdateDynamicColumns(DateTime currentDate)
|
||||||
|
{
|
||||||
|
DateTime endDate = currentDate.AddDays(7);
|
||||||
|
gridBillInfo.GridView.BeginUpdate();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
for (int i = 0; i < DateColumnList.Count; i++)
|
||||||
|
{
|
||||||
|
GridColumn gridColumn = DateColumnList[i];
|
||||||
|
// 当前列对应的日期 = 起始日期加 i 天
|
||||||
|
DateTime dateForColumn = currentDate.AddDays(i);
|
||||||
|
if (dateForColumn <= endDate)
|
||||||
|
{
|
||||||
|
gridColumn.FieldName = dateForColumn.ToString("yyyy-MM-dd");
|
||||||
|
gridColumn.Caption = dateForColumn.ToString("MM-dd");
|
||||||
|
gridColumn.Visible = true;
|
||||||
|
gridColumn.Tag = dateForColumn;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gridColumn.Visible = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
gridBillInfo.GridView.EndUpdate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 主表数据源改变时
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
private void OnGcMainDataSourceChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (DateColumnList.Count > 0 && DateColumnList[0].Tag is DateTime dateTime)
|
||||||
|
{
|
||||||
|
string billNo = SysModel.BillDocumentId;
|
||||||
|
this.gridBillInfo.GridControl.DataSourceChanged -= OnGcMainDataSourceChanged;
|
||||||
|
DataTable dataTable = gridBillInfo.GridControl.DataSource as DataTable;
|
||||||
|
if (dataTable != null)
|
||||||
|
{
|
||||||
|
//DataTable dataMain = dataTable.Copy();
|
||||||
|
string sqlValue = "select * from RD_worktimetab where 1 = 1";
|
||||||
|
sqlValue = $"{sqlValue} and lblOrderNo = '{billNo}' and showday >= '{dateTime.ToString("yyyy-MM-dd")}'";
|
||||||
|
DataTable dataDayPlan = BaseImpl.GetDataTableResult(sqlValue);
|
||||||
|
MergeMainDataWithDayPlan(dataTable, dataDayPlan, dateTime);
|
||||||
|
this.gridBillInfo.GridControl.DataSource = null;
|
||||||
|
this.gridBillInfo.GridControl.DataSource = dataTable;
|
||||||
|
}
|
||||||
|
this.gridBillInfo.GridControl.DataSourceChanged += OnGcMainDataSourceChanged;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 构建带日期的数据源
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="dataMain"></param>
|
||||||
|
/// <param name="dataDayPlan"></param>
|
||||||
|
/// <param name="startDate"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
private DataTable MergeMainDataWithDayPlan(DataTable dataMain, DataTable dataDayPlan, DateTime startDate)
|
||||||
|
{
|
||||||
|
string rightPrimaryKey = "billdocument_id";
|
||||||
|
string dateField = "showday";
|
||||||
|
string amountField = "amount";
|
||||||
|
string topPrimaryKey = BillModelObj.DetailUUIDKey;
|
||||||
|
DateTime endDate = startDate.AddDays(7); // 计算结束日期
|
||||||
|
// **1. 预索引 dataDayPlan 数据(billdocument_id -> 该 key 相关的所有行)**
|
||||||
|
Dictionary<string, List<DataRow>> dayPlanMap = new Dictionary<string, List<DataRow>>();
|
||||||
|
foreach (DataRow row in dataDayPlan.Rows)
|
||||||
|
{
|
||||||
|
string billId = row[rightPrimaryKey].ToString();
|
||||||
|
if (!dayPlanMap.ContainsKey(billId))
|
||||||
|
{
|
||||||
|
dayPlanMap[billId] = new List<DataRow>();
|
||||||
|
}
|
||||||
|
dayPlanMap[billId].Add(row);
|
||||||
|
}
|
||||||
|
// **2. 预构建主数据的列**
|
||||||
|
for (DateTime dt = startDate; dt <= endDate; dt = dt.AddDays(1))
|
||||||
|
{
|
||||||
|
string colName = dt.ToString("yyyy-MM-dd");
|
||||||
|
if (!dataMain.Columns.Contains(colName))
|
||||||
|
{
|
||||||
|
dataMain.Columns.Add(colName, typeof(decimal)); // 确保列存在
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// **3. 预构建数据填充映射表**
|
||||||
|
Dictionary<string, Dictionary<string, decimal>> dataMap = new Dictionary<string, Dictionary<string, decimal>>();
|
||||||
|
foreach (DataRow row in dataMain.Rows)
|
||||||
|
{
|
||||||
|
string key = row[topPrimaryKey].ToString();
|
||||||
|
if (!dataMap.ContainsKey(key))
|
||||||
|
{
|
||||||
|
dataMap[key] = new Dictionary<string, decimal>();
|
||||||
|
}
|
||||||
|
// **查找 key 关联的时间数据**
|
||||||
|
if (dayPlanMap.ContainsKey(key))
|
||||||
|
{
|
||||||
|
foreach (DataRow dayRow in dayPlanMap[key])
|
||||||
|
{
|
||||||
|
if (dayRow[dateField] != DBNull.Value)
|
||||||
|
{
|
||||||
|
DateTime dayValue = Convert.ToDateTime(dayRow[dateField]);
|
||||||
|
string colName = dayValue.ToString("yyyy-MM-dd");
|
||||||
|
if (dayValue >= startDate && dayValue <= endDate && dataMain.Columns.Contains(colName))
|
||||||
|
{
|
||||||
|
decimal.TryParse(dayRow[amountField] + "", out decimal amountValue);
|
||||||
|
dataMap[key][colName] = amountValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// **4. 一次性填充 DataTable(避免逐行赋值带来的性能问题)**
|
||||||
|
foreach (DataRow row in dataMain.Rows)
|
||||||
|
{
|
||||||
|
string key = row[topPrimaryKey].ToString();
|
||||||
|
if (dataMap.ContainsKey(key))
|
||||||
|
{
|
||||||
|
foreach (var col in dataMap[key])
|
||||||
|
{
|
||||||
|
row[col.Key] = col.Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dataMain;
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region 右键菜单执行后刷新
|
#region 右键菜单执行后刷新
|
||||||
@@ -2291,7 +2486,7 @@ namespace Lskj.PubAccraditation
|
|||||||
{
|
{
|
||||||
defaultValue = BaseImpl.GetDefaultValue(defaultValue);
|
defaultValue = BaseImpl.GetDefaultValue(defaultValue);
|
||||||
}
|
}
|
||||||
string billNo = this.BillModelObj.NewVer == 1|| SystemInfo.Instance.SplitOrderNewVer ? BillImpl.GetBillNo(this.BillModelObj.BillSeq) : defaultValue;
|
string billNo = this.BillModelObj.NewVer == 1 || SystemInfo.Instance.SplitOrderNewVer ? BillImpl.GetBillNo(this.BillModelObj.BillSeq) : defaultValue;
|
||||||
//构造表头
|
//构造表头
|
||||||
string masterSql = this.GetBillHearder(billNo);
|
string masterSql = this.GetBillHearder(billNo);
|
||||||
//构造明细"@billdocument_id@"
|
//构造明细"@billdocument_id@"
|
||||||
|
|||||||
Reference in New Issue
Block a user