SVN r640
SVN-Revision: r640
This commit is contained in:
@@ -88,6 +88,10 @@ namespace Lskj.PubAccraditation
|
|||||||
/// 主表动态生成的日期列
|
/// 主表动态生成的日期列
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<GridColumn> DateColumnList = new List<GridColumn>();
|
public List<GridColumn> DateColumnList = new List<GridColumn>();
|
||||||
|
/// <summary>
|
||||||
|
/// 主表动态生成的合计列
|
||||||
|
/// </summary>
|
||||||
|
public GridColumn SumGridColumn = new GridColumn();
|
||||||
#region 私有变量
|
#region 私有变量
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// id(推送记录)
|
/// id(推送记录)
|
||||||
@@ -1165,26 +1169,36 @@ namespace Lskj.PubAccraditation
|
|||||||
/// <param name="sender"></param>
|
/// <param name="sender"></param>
|
||||||
/// <param name="e"></param>
|
/// <param name="e"></param>
|
||||||
private void OnDataFileRefrshFile(object sender, EventArgs e)
|
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();
|
AddDataColumns();
|
||||||
}
|
UpdateDynamicColumns();
|
||||||
UpdateDynamicColumns(dateTime);
|
|
||||||
OnGcMainDataSourceChanged(gridBillInfo.GridView, null);//手动刷新日期合计数据源
|
OnGcMainDataSourceChanged(gridBillInfo.GridView, null);//手动刷新日期合计数据源
|
||||||
}
|
}
|
||||||
}
|
|
||||||
private void AddDataColumns()
|
private void AddDataColumns()
|
||||||
{
|
{
|
||||||
foreach (GridColumn gridColumn in gridBillInfo.GridView.Columns)
|
foreach (GridColumn gridColumn in gridBillInfo.GridView.Columns)
|
||||||
{
|
{
|
||||||
gridColumn.Fixed = DevExpress.XtraGrid.Columns.FixedStyle.Left;
|
gridColumn.Fixed = DevExpress.XtraGrid.Columns.FixedStyle.Left;
|
||||||
}
|
}
|
||||||
for (int i = 0; i < 7; i++)
|
int dayCount = 0;
|
||||||
|
BaseUserControl baseUserControl = ControlObj.FindControl("bom_rdm_tianshu");
|
||||||
|
if (baseUserControl != null)
|
||||||
|
{
|
||||||
|
int.TryParse(baseUserControl.EditText, out dayCount);
|
||||||
|
}
|
||||||
|
if (dayCount <= 0)
|
||||||
|
{
|
||||||
|
dayCount = 7;
|
||||||
|
}
|
||||||
|
if (DateColumnList.Count != dayCount)
|
||||||
|
{
|
||||||
|
foreach (GridColumn item in DateColumnList)
|
||||||
|
{
|
||||||
|
gridBillInfo.GridView.Columns.Remove(item);
|
||||||
|
}
|
||||||
|
gridBillInfo.GridView.Columns.Remove(SumGridColumn);
|
||||||
|
DateColumnList.Clear();
|
||||||
|
for (int i = 0; i < dayCount; i++)
|
||||||
{
|
{
|
||||||
GridColumn gridColumn = new GridColumn();
|
GridColumn gridColumn = new GridColumn();
|
||||||
gridColumn.AppearanceCell.Options.UseTextOptions = true;
|
gridColumn.AppearanceCell.Options.UseTextOptions = true;
|
||||||
@@ -1200,21 +1214,60 @@ namespace Lskj.PubAccraditation
|
|||||||
gridColumn.Width = 70;
|
gridColumn.Width = 70;
|
||||||
gridColumn.DisplayFormat.FormatType = FormatType.Numeric;
|
gridColumn.DisplayFormat.FormatType = FormatType.Numeric;
|
||||||
gridColumn.DisplayFormat.FormatString = "{0:#,##0.####}";
|
gridColumn.DisplayFormat.FormatString = "{0:#,##0.####}";
|
||||||
gridColumn.Visible = false;
|
gridColumn.Visible = true;
|
||||||
gridColumn.SummaryItem.SummaryType = SummaryItemType.Sum;
|
gridColumn.SummaryItem.SummaryType = SummaryItemType.Sum;
|
||||||
gridColumn.SummaryItem.DisplayFormat = "{0:#,##0.####}";
|
gridColumn.SummaryItem.DisplayFormat = "{0:#,##0.####}";
|
||||||
gridBillInfo.GridView.Columns.Add(gridColumn);
|
gridBillInfo.GridView.Columns.Add(gridColumn);
|
||||||
DateColumnList.Add(gridColumn);
|
DateColumnList.Add(gridColumn);
|
||||||
}
|
}
|
||||||
|
GridColumn sumGridColumn = new GridColumn();
|
||||||
|
sumGridColumn.AppearanceCell.Options.UseTextOptions = true;
|
||||||
|
sumGridColumn.AppearanceCell.TextOptions.HAlignment = HorzAlignment.Center;
|
||||||
|
sumGridColumn.AppearanceHeader.Options.UseTextOptions = true;
|
||||||
|
sumGridColumn.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center;
|
||||||
|
sumGridColumn.OptionsColumn.AllowEdit = false;
|
||||||
|
sumGridColumn.OptionsColumn.AllowMove = false;
|
||||||
|
sumGridColumn.OptionsColumn.AllowSize = false;
|
||||||
|
sumGridColumn.OptionsFilter.AllowFilter = false;
|
||||||
|
sumGridColumn.OptionsColumn.AllowMerge = DefaultBoolean.False;
|
||||||
|
sumGridColumn.OptionsColumn.AllowSort = DefaultBoolean.False;
|
||||||
|
sumGridColumn.FieldName = $"workingsum";
|
||||||
|
sumGridColumn.Caption = $"工时合计";
|
||||||
|
sumGridColumn.Width = 70;
|
||||||
|
sumGridColumn.DisplayFormat.FormatType = FormatType.Numeric;
|
||||||
|
sumGridColumn.DisplayFormat.FormatString = "{0:#,##0.####}";
|
||||||
|
sumGridColumn.Visible = true;
|
||||||
|
sumGridColumn.SummaryItem.SummaryType = SummaryItemType.Sum;
|
||||||
|
sumGridColumn.SummaryItem.DisplayFormat = "{0:#,##0.####}";
|
||||||
|
SumGridColumn = sumGridColumn;
|
||||||
|
gridBillInfo.GridView.Columns.Add(sumGridColumn);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 根据日期修改列状态
|
/// 根据日期修改列状态
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="currentDate"></param>
|
/// <param name="currentDate"></param>
|
||||||
private void UpdateDynamicColumns(DateTime currentDate)
|
private void UpdateDynamicColumns()
|
||||||
{
|
{
|
||||||
DateTime endDate = currentDate.AddDays(7);
|
DateTime currentDate = DateTime.Now;
|
||||||
|
BaseUserControl dateUserControl = ControlObj.FindControl("bom_rdm_ksdt");
|
||||||
|
if (dateUserControl is LabelDateEdit labelDateEdit)
|
||||||
|
{
|
||||||
|
currentDate = labelDateEdit.TextEdit.DateTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
int dayCount = 0;
|
||||||
|
BaseUserControl baseUserControl = ControlObj.FindControl("bom_rdm_tianshu");
|
||||||
|
if (baseUserControl != null)
|
||||||
|
{
|
||||||
|
int.TryParse(baseUserControl.EditText, out dayCount);
|
||||||
|
}
|
||||||
|
if (dayCount <= 0)
|
||||||
|
{
|
||||||
|
dayCount = 7;
|
||||||
|
}
|
||||||
|
DateTime endDate = currentDate.AddDays(dayCount);
|
||||||
gridBillInfo.GridView.BeginUpdate();
|
gridBillInfo.GridView.BeginUpdate();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -1235,6 +1288,7 @@ namespace Lskj.PubAccraditation
|
|||||||
gridColumn.Visible = false;
|
gridColumn.Visible = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@@ -1310,66 +1364,86 @@ namespace Lskj.PubAccraditation
|
|||||||
string dateField = "showday";
|
string dateField = "showday";
|
||||||
string amountField = "amount";
|
string amountField = "amount";
|
||||||
string topPrimaryKey = BillModelObj.DetailUUIDKey;
|
string topPrimaryKey = BillModelObj.DetailUUIDKey;
|
||||||
DateTime endDate = startDate.AddDays(7); // 计算结束日期
|
int dayCount = 0;
|
||||||
// **1. 预索引 dataDayPlan 数据(billdocument_id -> 该 key 相关的所有行)**
|
|
||||||
Dictionary<string, List<DataRow>> dayPlanMap = new Dictionary<string, List<DataRow>>();
|
BaseUserControl baseUserControl = ControlObj.FindControl("bom_rdm_tianshu");
|
||||||
|
if (baseUserControl != null)
|
||||||
|
{
|
||||||
|
int.TryParse(baseUserControl.EditText, out dayCount);
|
||||||
|
}
|
||||||
|
if (dayCount <= 0)
|
||||||
|
{
|
||||||
|
dayCount = 7;
|
||||||
|
}
|
||||||
|
DateTime endDate = startDate.AddDays(dayCount);
|
||||||
|
|
||||||
|
// ---------- 1. 预索引 dataDayPlan:billdocument_id -> List<DataRow> ----------
|
||||||
|
var dayPlanMap = new Dictionary<string, List<DataRow>>();
|
||||||
foreach (DataRow row in dataDayPlan.Rows)
|
foreach (DataRow row in dataDayPlan.Rows)
|
||||||
{
|
{
|
||||||
string billId = row[rightPrimaryKey].ToString();
|
string billId = row[rightPrimaryKey].ToString();
|
||||||
if (!dayPlanMap.ContainsKey(billId))
|
if (!dayPlanMap.TryGetValue(billId, out var list))
|
||||||
{
|
{
|
||||||
dayPlanMap[billId] = new List<DataRow>();
|
list = new List<DataRow>();
|
||||||
|
dayPlanMap[billId] = list;
|
||||||
}
|
}
|
||||||
dayPlanMap[billId].Add(row);
|
list.Add(row);
|
||||||
}
|
}
|
||||||
// **2. 预构建主数据的列**
|
|
||||||
for (DateTime dt = startDate; dt <= endDate; dt = dt.AddDays(1))
|
// ---------- 2. 为主表添加日期列和合计列 ----------
|
||||||
|
for (DateTime d = startDate; d <= endDate; d = d.AddDays(1))
|
||||||
{
|
{
|
||||||
string colName = dt.ToString("yyyy-MM-dd");
|
string colName = d.ToString("yyyy-MM-dd");
|
||||||
if (!dataMain.Columns.Contains(colName))
|
if (!dataMain.Columns.Contains(colName))
|
||||||
|
dataMain.Columns.Add(colName, typeof(decimal));
|
||||||
|
}
|
||||||
|
if (!dataMain.Columns.Contains("workingsum"))
|
||||||
|
dataMain.Columns.Add("workingsum", typeof(decimal));
|
||||||
|
|
||||||
|
// ---------- 3. 预构建填充映射:主键 -> (日期列名, 金额) ----------
|
||||||
|
var dataMap = new Dictionary<string, Dictionary<string, decimal>>();
|
||||||
|
foreach (DataRow mainRow in dataMain.Rows)
|
||||||
{
|
{
|
||||||
dataMain.Columns.Add(colName, typeof(decimal)); // 确保列存在
|
string key = mainRow[topPrimaryKey].ToString();
|
||||||
}
|
var inner = new Dictionary<string, decimal>();
|
||||||
}
|
dataMap[key] = inner;
|
||||||
// **3. 预构建数据填充映射表**
|
|
||||||
Dictionary<string, Dictionary<string, decimal>> dataMap = new Dictionary<string, Dictionary<string, decimal>>();
|
if (dayPlanMap.TryGetValue(key, out var rows))
|
||||||
foreach (DataRow row in dataMain.Rows)
|
|
||||||
{
|
{
|
||||||
string key = row[topPrimaryKey].ToString();
|
foreach (DataRow dayRow in rows)
|
||||||
if (!dataMap.ContainsKey(key))
|
|
||||||
{
|
{
|
||||||
dataMap[key] = new Dictionary<string, decimal>();
|
if (dayRow[dateField] == DBNull.Value) continue;
|
||||||
|
|
||||||
|
DateTime d = Convert.ToDateTime(dayRow[dateField]);
|
||||||
|
if (d < startDate || d > endDate) continue;
|
||||||
|
|
||||||
|
string col = d.ToString("yyyy-MM-dd");
|
||||||
|
if (!dataMain.Columns.Contains(col)) continue;
|
||||||
|
|
||||||
|
if (decimal.TryParse(dayRow[amountField]?.ToString(), out decimal amt))
|
||||||
|
inner[col] = amt;
|
||||||
}
|
}
|
||||||
// **查找 key 关联的时间数据**
|
}
|
||||||
if (dayPlanMap.ContainsKey(key))
|
}
|
||||||
|
|
||||||
|
// ---------- 4. 一次性填充并计算行合计 ----------
|
||||||
|
foreach (DataRow mainRow in dataMain.Rows)
|
||||||
{
|
{
|
||||||
foreach (DataRow dayRow in dayPlanMap[key])
|
string key = mainRow[topPrimaryKey].ToString();
|
||||||
|
decimal rowSum = 0m;
|
||||||
|
|
||||||
|
if (dataMap.TryGetValue(key, out var inner))
|
||||||
{
|
{
|
||||||
if (dayRow[dateField] != DBNull.Value)
|
foreach (var kv in inner)
|
||||||
{
|
{
|
||||||
DateTime dayValue = Convert.ToDateTime(dayRow[dateField]);
|
mainRow[kv.Key] = kv.Value;
|
||||||
string colName = dayValue.ToString("yyyy-MM-dd");
|
rowSum += kv.Value;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mainRow["workingsum"] = rowSum; // 行汇总
|
||||||
}
|
}
|
||||||
|
|
||||||
return dataMain;
|
return dataMain;
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
Reference in New Issue
Block a user