SVN r640
SVN-Revision: r640
This commit is contained in:
@@ -88,6 +88,10 @@ namespace Lskj.PubAccraditation
|
||||
/// 主表动态生成的日期列
|
||||
/// </summary>
|
||||
public List<GridColumn> DateColumnList = new List<GridColumn>();
|
||||
/// <summary>
|
||||
/// 主表动态生成的合计列
|
||||
/// </summary>
|
||||
public GridColumn SumGridColumn = new GridColumn();
|
||||
#region 私有变量
|
||||
/// <summary>
|
||||
/// id(推送记录)
|
||||
@@ -1166,17 +1170,9 @@ namespace Lskj.PubAccraditation
|
||||
/// <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);//手动刷新日期合计数据源
|
||||
}
|
||||
AddDataColumns();
|
||||
UpdateDynamicColumns();
|
||||
OnGcMainDataSourceChanged(gridBillInfo.GridView, null);//手动刷新日期合计数据源
|
||||
}
|
||||
private void AddDataColumns()
|
||||
{
|
||||
@@ -1184,27 +1180,67 @@ namespace Lskj.PubAccraditation
|
||||
{
|
||||
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)
|
||||
{
|
||||
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);
|
||||
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.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 = true;
|
||||
gridColumn.SummaryItem.SummaryType = SummaryItemType.Sum;
|
||||
gridColumn.SummaryItem.DisplayFormat = "{0:#,##0.####}";
|
||||
gridBillInfo.GridView.Columns.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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1212,9 +1248,26 @@ namespace Lskj.PubAccraditation
|
||||
/// 根据日期修改列状态
|
||||
/// </summary>
|
||||
/// <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();
|
||||
try
|
||||
{
|
||||
@@ -1235,6 +1288,7 @@ namespace Lskj.PubAccraditation
|
||||
gridColumn.Visible = false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
finally
|
||||
{
|
||||
@@ -1310,66 +1364,86 @@ namespace Lskj.PubAccraditation
|
||||
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>>();
|
||||
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 = startDate.AddDays(dayCount);
|
||||
|
||||
// ---------- 1. 预索引 dataDayPlan:billdocument_id -> List<DataRow> ----------
|
||||
var dayPlanMap = new Dictionary<string, List<DataRow>>();
|
||||
foreach (DataRow row in dataDayPlan.Rows)
|
||||
{
|
||||
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))
|
||||
{
|
||||
dataMain.Columns.Add(colName, typeof(decimal)); // 确保列存在
|
||||
}
|
||||
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)
|
||||
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)
|
||||
{
|
||||
string key = row[topPrimaryKey].ToString();
|
||||
if (!dataMap.ContainsKey(key))
|
||||
string key = mainRow[topPrimaryKey].ToString();
|
||||
var inner = new Dictionary<string, decimal>();
|
||||
dataMap[key] = inner;
|
||||
|
||||
if (dayPlanMap.TryGetValue(key, out var rows))
|
||||
{
|
||||
dataMap[key] = new Dictionary<string, decimal>();
|
||||
}
|
||||
// **查找 key 关联的时间数据**
|
||||
if (dayPlanMap.ContainsKey(key))
|
||||
{
|
||||
foreach (DataRow dayRow in dayPlanMap[key])
|
||||
foreach (DataRow dayRow in rows)
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
// **4. 一次性填充 DataTable(避免逐行赋值带来的性能问题)**
|
||||
foreach (DataRow row in dataMain.Rows)
|
||||
|
||||
// ---------- 4. 一次性填充并计算行合计 ----------
|
||||
foreach (DataRow mainRow in dataMain.Rows)
|
||||
{
|
||||
string key = row[topPrimaryKey].ToString();
|
||||
if (dataMap.ContainsKey(key))
|
||||
string key = mainRow[topPrimaryKey].ToString();
|
||||
decimal rowSum = 0m;
|
||||
|
||||
if (dataMap.TryGetValue(key, out var inner))
|
||||
{
|
||||
foreach (var col in dataMap[key])
|
||||
foreach (var kv in inner)
|
||||
{
|
||||
row[col.Key] = col.Value;
|
||||
mainRow[kv.Key] = kv.Value;
|
||||
rowSum += kv.Value;
|
||||
}
|
||||
}
|
||||
|
||||
mainRow["workingsum"] = rowSum; // 行汇总
|
||||
}
|
||||
|
||||
return dataMain;
|
||||
}
|
||||
#endregion
|
||||
|
||||
Reference in New Issue
Block a user