SVN r362
SVN-Revision: r362
This commit is contained in:
@@ -362,6 +362,13 @@ namespace Lskj.ProductiSched
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private bool SaveDatePlanRecord()
|
private bool SaveDatePlanRecord()
|
||||||
{
|
{
|
||||||
|
BaseUserControl dataTypeControl = DataModel.TopSearchObj.ParentPanel.Controls.Cast<System.Windows.Forms.Control>().Where(n => n is LabelComboxEdit).Cast<BaseUserControl>().FirstOrDefault(); // 获取第一个符合条件的控件
|
||||||
|
string typeDate = "0";
|
||||||
|
if (dataTypeControl != null)
|
||||||
|
{
|
||||||
|
LabelComboxEdit labelAutoTextEdit = dataTypeControl as LabelComboxEdit;
|
||||||
|
typeDate = labelAutoTextEdit.EditValue;
|
||||||
|
}
|
||||||
// 获取主数据源,假设已绑定到 gridControl1
|
// 获取主数据源,假设已绑定到 gridControl1
|
||||||
DataTable mainDataSource = bandGcTop.BandedView.GridControl.DataSourceTable();
|
DataTable mainDataSource = bandGcTop.BandedView.GridControl.DataSourceTable();
|
||||||
if (mainDataSource == null)
|
if (mainDataSource == null)
|
||||||
@@ -417,7 +424,7 @@ namespace Lskj.ProductiSched
|
|||||||
}
|
}
|
||||||
// 调用存储过程保存变更数据
|
// 调用存储过程保存变更数据
|
||||||
string msg;
|
string msg;
|
||||||
int ret = SaveDayPlanChanges(tvp, out msg);
|
int ret = SaveDayPlanChanges(tvp, typeDate,out msg);
|
||||||
if (ret == 1)
|
if (ret == 1)
|
||||||
{
|
{
|
||||||
MessageUtil.Show("保存成功:" + msg);
|
MessageUtil.Show("保存成功:" + msg);
|
||||||
@@ -437,35 +444,48 @@ namespace Lskj.ProductiSched
|
|||||||
/// <param name="tvp">包含所有变更记录的 DataTable,必须与 dbo.DayPlanChangeType 定义一致</param>
|
/// <param name="tvp">包含所有变更记录的 DataTable,必须与 dbo.DayPlanChangeType 定义一致</param>
|
||||||
/// <param name="message">输出提示信息,存储过程执行后的返回消息</param>
|
/// <param name="message">输出提示信息,存储过程执行后的返回消息</param>
|
||||||
/// <returns>存储过程返回值,成功返回 1,失败返回 0</returns>
|
/// <returns>存储过程返回值,成功返回 1,失败返回 0</returns>
|
||||||
public int SaveDayPlanChanges(DataTable tvp, out string message)
|
public int SaveDayPlanChanges(DataTable tvp, string typeDate, out string message)
|
||||||
{
|
{
|
||||||
// 创建输出参数 @msg
|
// 创建输出参数 @msg
|
||||||
SqlParameter pMsg = new SqlParameter("@msg", SqlDbType.VarChar, 2000)
|
SqlParameter pMsg = new SqlParameter("@msg", SqlDbType.VarChar, 2000)
|
||||||
{
|
{
|
||||||
Direction = ParameterDirection.Output
|
Direction = ParameterDirection.Output
|
||||||
};
|
};
|
||||||
|
|
||||||
// 创建返回值参数 @return
|
// 创建返回值参数 @return
|
||||||
SqlParameter returnValue = new SqlParameter("@return", SqlDbType.Int)
|
SqlParameter returnValue = new SqlParameter("@return", SqlDbType.Int)
|
||||||
{
|
{
|
||||||
Direction = ParameterDirection.ReturnValue
|
Direction = ParameterDirection.ReturnValue
|
||||||
};
|
};
|
||||||
|
|
||||||
// 创建 TVP 参数,名称必须与存储过程参数一致
|
// 创建 TVP 参数,名称必须与存储过程参数一致
|
||||||
SqlParameter tvpParam = new SqlParameter("@DayPlanChanges", SqlDbType.Structured)
|
SqlParameter tvpParam = new SqlParameter("@DayPlanChanges", SqlDbType.Structured)
|
||||||
{
|
{
|
||||||
TypeName = "dbo.DayPlanChangeType",
|
TypeName = "dbo.DayPlanChangeType",
|
||||||
Value = tvp
|
Value = tvp
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 创建 typeDate 参数并传入存储过程
|
||||||
|
SqlParameter typeDateParam = new SqlParameter("@TypeDate", SqlDbType.VarChar, 10)
|
||||||
|
{
|
||||||
|
Value = typeDate
|
||||||
|
};
|
||||||
|
|
||||||
// 构造参数数组
|
// 构造参数数组
|
||||||
SqlParameter[] parameters = new SqlParameter[] { tvpParam, pMsg, returnValue };
|
SqlParameter[] parameters = new SqlParameter[] { tvpParam, typeDateParam, pMsg, returnValue };
|
||||||
|
|
||||||
// 执行存储过程,此处调用 ExecuteNonQuery 即可,不需要返回数据集
|
// 执行存储过程,此处调用 ExecuteNonQuery 即可,不需要返回数据集
|
||||||
// 请确保 DBUtil.ExecuteNonQuery 方法能够传递参数并执行存储过程
|
// 请确保 BaseImpl.ExecProcedure 方法能够传递参数并执行存储过程
|
||||||
BaseImpl.ExecProcedure("usp_MergeDayPlanChanges", parameters);
|
BaseImpl.ExecProcedure("usp_MergeDayPlanChanges", parameters);
|
||||||
|
|
||||||
// 获取输出参数 @msg 中的提示信息
|
// 获取输出参数 @msg 中的提示信息
|
||||||
message = pMsg.Value.ToString();
|
message = pMsg.Value.ToString();
|
||||||
|
|
||||||
// 获取存储过程的返回值
|
// 获取存储过程的返回值
|
||||||
int result = Convert.ToInt32(returnValue.Value);
|
int result = Convert.ToInt32(returnValue.Value);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 单元格点击刷新当前行数据
|
/// 单元格点击刷新当前行数据
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -479,14 +499,27 @@ namespace Lskj.ProductiSched
|
|||||||
DataRow rowItem = bandGcTop.BandedView.GetFocusedDataRow();
|
DataRow rowItem = bandGcTop.BandedView.GetFocusedDataRow();
|
||||||
if (rowItem != null)
|
if (rowItem != null)
|
||||||
{
|
{
|
||||||
|
BaseUserControl baseUserControl = DataModel.TopSearchObj.ParentPanel.Controls.Cast<BaseUserControl>().Where(n => n is LabelDateEdit).FirstOrDefault();
|
||||||
|
BaseUserControl dataTypeControl = DataModel.TopSearchObj.ParentPanel.Controls.Cast<System.Windows.Forms.Control>().Where(n => n is LabelComboxEdit).Cast<BaseUserControl>().FirstOrDefault(); // 获取第一个符合条件的控件
|
||||||
|
string typeDate = "0";
|
||||||
|
LabelDateEdit labelDateEdit = null;
|
||||||
|
if (baseUserControl != null)
|
||||||
|
{
|
||||||
|
labelDateEdit = baseUserControl as LabelDateEdit;
|
||||||
|
}
|
||||||
|
if (dataTypeControl != null)
|
||||||
|
{
|
||||||
|
LabelComboxEdit labelAutoTextEdit = dataTypeControl as LabelComboxEdit;
|
||||||
|
typeDate = labelAutoTextEdit.EditValue;
|
||||||
|
}
|
||||||
string searchSql = this.GetSearchSql(model, rowItem, false);
|
string searchSql = this.GetSearchSql(model, rowItem, false);
|
||||||
|
string isweekcond = DataModel.TopModuleModel.HasReport ? "" : $"and isWeek='{typeDate}'";
|
||||||
|
searchSql = $"{ReplaceHelper.ReplaceWhereCond(searchSql)} and day >= '{labelDateEdit.TextEdit.DateTime.ToString("yyyy-MM-dd")}' {isweekcond}";
|
||||||
gcRight.SetGridViewDataSource(BaseImpl.GetDataTableResult(searchSql));
|
gcRight.SetGridViewDataSource(BaseImpl.GetDataTableResult(searchSql));
|
||||||
if (e != null)
|
if (e != null)
|
||||||
{
|
{
|
||||||
BaseUserControl baseUserControl = DataModel.TopSearchObj.ParentPanel.Controls.Cast<BaseUserControl>().Where(n => n is LabelDateEdit).FirstOrDefault();
|
if (labelDateEdit != null)
|
||||||
if (baseUserControl != null)
|
|
||||||
{
|
{
|
||||||
LabelDateEdit labelDateEdit = baseUserControl as LabelDateEdit;
|
|
||||||
DateTime dateTime = labelDateEdit.TextEdit.DateTime;
|
DateTime dateTime = labelDateEdit.TextEdit.DateTime;
|
||||||
DataRow focusedRow = bandGcTop.BandedView.GetFocusedDataRow();
|
DataRow focusedRow = bandGcTop.BandedView.GetFocusedDataRow();
|
||||||
DataTable dataDayPlan = gcRight.GridControl.DataSourceTable().Copy();
|
DataTable dataDayPlan = gcRight.GridControl.DataSourceTable().Copy();
|
||||||
@@ -599,12 +632,20 @@ namespace Lskj.ProductiSched
|
|||||||
private void OnDataSourceBindCallBack(object sender, EventArgs e)
|
private void OnDataSourceBindCallBack(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
BaseUserControl baseUserControl = DataModel.TopSearchObj.ParentPanel.Controls.Cast<BaseUserControl>().Where(n => n is LabelDateEdit).FirstOrDefault();
|
BaseUserControl baseUserControl = DataModel.TopSearchObj.ParentPanel.Controls.Cast<BaseUserControl>().Where(n => n is LabelDateEdit).FirstOrDefault();
|
||||||
|
BaseUserControl dataTypeControl = DataModel.TopSearchObj.ParentPanel.Controls.Cast<System.Windows.Forms.Control>().Where(n => n is LabelComboxEdit).Cast<BaseUserControl>().FirstOrDefault(); // 获取第一个符合条件的控件
|
||||||
|
string typeDate = "0";
|
||||||
|
if (dataTypeControl != null)
|
||||||
|
{
|
||||||
|
LabelComboxEdit labelAutoTextEdit = dataTypeControl as LabelComboxEdit;
|
||||||
|
typeDate = labelAutoTextEdit.EditValue;
|
||||||
|
}
|
||||||
|
|
||||||
if (baseUserControl != null)
|
if (baseUserControl != null)
|
||||||
{
|
{
|
||||||
LabelDateEdit labelDateEdit = baseUserControl as LabelDateEdit;
|
LabelDateEdit labelDateEdit = baseUserControl as LabelDateEdit;
|
||||||
DateTime dateTime = labelDateEdit.TextEdit.DateTime;
|
DateTime dateTime = labelDateEdit.TextEdit.DateTime;
|
||||||
UpdateDynamicColumns(bandGcTop, dateTime);
|
UpdateDynamicColumns(bandGcTop, dateTime,typeDate);
|
||||||
UpdateDynamicColumns(bandGcBottom, dateTime);
|
UpdateDynamicColumns(bandGcBottom, dateTime,typeDate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -615,19 +656,34 @@ namespace Lskj.ProductiSched
|
|||||||
private void OnSearchAfterCallBack(object sender, EventArgs e)
|
private void OnSearchAfterCallBack(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
BaseUserControl baseUserControl = DataModel.TopSearchObj.ParentPanel.Controls.Cast<BaseUserControl>().Where(n => n is LabelDateEdit).FirstOrDefault();
|
BaseUserControl baseUserControl = DataModel.TopSearchObj.ParentPanel.Controls.Cast<BaseUserControl>().Where(n => n is LabelDateEdit).FirstOrDefault();
|
||||||
|
BaseUserControl dataTypeControl = DataModel.TopSearchObj.ParentPanel.Controls.Cast<System.Windows.Forms.Control>().Where(n => n is LabelComboxEdit).Cast<BaseUserControl>().FirstOrDefault(); // 获取第一个符合条件的控件
|
||||||
|
string typeDate = "0";
|
||||||
|
if (dataTypeControl != null)
|
||||||
|
{
|
||||||
|
LabelComboxEdit labelAutoTextEdit = dataTypeControl as LabelComboxEdit;
|
||||||
|
typeDate = labelAutoTextEdit.EditValue;
|
||||||
|
}
|
||||||
if (baseUserControl != null)
|
if (baseUserControl != null)
|
||||||
{
|
{
|
||||||
LabelDateEdit labelDateEdit = baseUserControl as LabelDateEdit;
|
LabelDateEdit labelDateEdit = baseUserControl as LabelDateEdit;
|
||||||
|
if (typeDate == "1")
|
||||||
|
{
|
||||||
|
DateTime endDate = labelDateEdit.TextEdit.DateTime.AddMonths(3).AddDays(-1); // 计算结束日期
|
||||||
|
int weekIndex = 0;
|
||||||
|
DateTime weekStart = GetStartOfWeek(labelDateEdit.TextEdit.DateTime); // 获取本周的周一日期
|
||||||
|
labelDateEdit.TextEdit.DateTime = weekStart;
|
||||||
|
}
|
||||||
DateTime dateTime = labelDateEdit.TextEdit.DateTime;
|
DateTime dateTime = labelDateEdit.TextEdit.DateTime;
|
||||||
UpdateDynamicColumns(bandGcTop, dateTime);
|
UpdateDynamicColumns(bandGcTop, dateTime, typeDate);
|
||||||
UpdateDynamicColumns(bandGcBottom, dateTime);
|
UpdateDynamicColumns(bandGcBottom, dateTime, typeDate);
|
||||||
DataTable dataMain = bandGcTop.GridControl.DataSourceTable().Copy();
|
DataTable dataMain = bandGcTop.GridControl.DataSourceTable().Copy();
|
||||||
DataTable dataDetail = bandGcTop.GridControl.DataSourceTable().Copy();
|
DataTable dataDetail = bandGcTop.GridControl.DataSourceTable().Copy();
|
||||||
bandGcTop.GridControl.DataSource = null;
|
bandGcTop.GridControl.DataSource = null;
|
||||||
string sqlValue = DataModel.RightModuleModel.MenuSql;
|
string sqlValue = DataModel.RightModuleModel.MenuSql;
|
||||||
sqlValue = $"{ReplaceHelper.ReplaceWhereCond(sqlValue)} and day >= '{dateTime.ToString("yyyy-MM-dd")}'";
|
string isweekcond = DataModel.TopModuleModel.HasReport?"":$"and isWeek='{typeDate}'";
|
||||||
|
sqlValue = $"{ReplaceHelper.ReplaceWhereCond(sqlValue)} and day >= '{dateTime.ToString("yyyy-MM-dd")}' {isweekcond}";
|
||||||
DataTable dataDayPlan = BaseImpl.GetDataTableResult(sqlValue);
|
DataTable dataDayPlan = BaseImpl.GetDataTableResult(sqlValue);
|
||||||
MergeMainDataWithDayPlan(dataMain, dataDayPlan, dateTime);
|
MergeMainDataWithDayPlan(dataMain, dataDayPlan, dateTime, typeDate);
|
||||||
bandGcTop.BandedView.GridControl.DataSource = dataMain;
|
bandGcTop.BandedView.GridControl.DataSource = dataMain;
|
||||||
if (bandGcBottom.Visible)
|
if (bandGcBottom.Visible)
|
||||||
{
|
{
|
||||||
@@ -725,33 +781,195 @@ namespace Lskj.ProductiSched
|
|||||||
}
|
}
|
||||||
gridBand.Columns.Add(gridColumn);
|
gridBand.Columns.Add(gridColumn);
|
||||||
}
|
}
|
||||||
|
// 现在添加15个周列
|
||||||
|
for (int i = 93; i < 108; i++) // 新增15个周列
|
||||||
|
{
|
||||||
|
GridBand gridBand = new GridBand();
|
||||||
|
gridBand.Name = $"Week_{i - 93}";
|
||||||
|
gridBand.Caption = "";
|
||||||
|
gridBand.OptionsBand.AllowMove = false;
|
||||||
|
gridBand.OptionsBand.AllowSize = false;
|
||||||
|
gridBand.AppearanceHeader.Options.UseFont = true;
|
||||||
|
gridBand.AppearanceHeader.Font = new Font("宋体", 9, FontStyle.Bold);
|
||||||
|
gridBand.AppearanceHeader.Options.UseTextOptions = true;
|
||||||
|
gridBand.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center;
|
||||||
|
bandedGridControlEx.BandedView.Bands.Add(gridBand);
|
||||||
|
BandedGridColumn gridColumn = new BandedGridColumn();
|
||||||
|
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 = $"WWeek_{i - 93}";
|
||||||
|
gridColumn.Width = 140;
|
||||||
|
gridColumn.DisplayFormat.FormatType = FormatType.Numeric;
|
||||||
|
gridColumn.DisplayFormat.FormatString = "{0:#,##0.####}";
|
||||||
|
gridColumn.Visible = false;
|
||||||
|
if (bandedGridControlEx == bandGcTop)
|
||||||
|
{
|
||||||
|
gridColumn.SummaryItem.SummaryType = SummaryItemType.Sum;
|
||||||
|
gridColumn.SummaryItem.DisplayFormat = "{0:#,##0.####}";
|
||||||
}
|
}
|
||||||
|
gridBand.Columns.Add(gridColumn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#region 类型切换日期展示方法
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 根据日期修改列状态
|
/// 构建带日期或周期
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="bandedGridControlEx"></param>
|
||||||
/// <param name="currentDate"></param>
|
/// <param name="currentDate"></param>
|
||||||
private void UpdateDynamicColumns(BandedGridControlEx bandedGridControlEx, DateTime currentDate)
|
/// <param name="typeDate"></param>
|
||||||
|
private void UpdateDynamicColumns(BandedGridControlEx bandedGridControlEx, DateTime currentDate, string typeDate = "0")
|
||||||
{
|
{
|
||||||
// 定义三个月的结束日期:起始日期加3个月减1天
|
|
||||||
DateTime endDate = currentDate.AddMonths(3).AddDays(-1);
|
|
||||||
bandedGridControlEx.BandedView.BeginUpdate();
|
bandedGridControlEx.BandedView.BeginUpdate();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
if (typeDate == "1")
|
||||||
|
{
|
||||||
|
UpdateWeeklyColumns(bandedGridControlEx, currentDate);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UpdateDailyColumns(bandedGridControlEx, currentDate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
bandedGridControlEx.BandedView.EndUpdate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 按照周结构生成列
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="grid"></param>
|
||||||
|
/// <param name="currentDate"></param>
|
||||||
|
private void UpdateWeeklyColumns(BandedGridControlEx grid, DateTime currentDate)
|
||||||
|
{
|
||||||
|
DateTime endDate = currentDate.AddMonths(3).AddDays(-1); // 计算结束日期
|
||||||
|
int weekIndex = 0;
|
||||||
|
DateTime weekStart = GetStartOfWeek(currentDate); // 获取本周的周一日期
|
||||||
|
|
||||||
|
// 查找并更新15个虚拟的周列
|
||||||
|
while (weekStart <= endDate && weekIndex < 15)
|
||||||
|
{
|
||||||
|
DateTime weekEnd = weekStart.AddDays(6); // 周日的日期是周一 + 6 天
|
||||||
|
|
||||||
|
// 查找现有的虚拟周列(Week_0, Week_1, ..., Week_14)
|
||||||
|
string bandTitle = $"Week_{weekIndex}";
|
||||||
|
GridBand weekBand = grid.BandedView.Bands.Cast<GridBand>()
|
||||||
|
.FirstOrDefault(b => b.Name == bandTitle);
|
||||||
|
|
||||||
|
if (weekBand != null && weekBand.Columns.Count > 0)
|
||||||
|
{
|
||||||
|
BandedGridColumn weekColumn = weekBand.Columns[0];
|
||||||
|
weekBand.Visible = true;
|
||||||
|
// 设置周列表头:例如 "03-01至03-07"
|
||||||
|
weekBand.Caption = $"{weekStart:MM-dd}至{weekEnd:MM-dd}";
|
||||||
|
weekColumn.FieldName = weekStart.ToString("yyyy-MM-dd");
|
||||||
|
// 设置列的内容为“第几周”
|
||||||
|
weekColumn.Caption = $"第{GetWeekOfYear(weekStart)}周";
|
||||||
|
|
||||||
|
// 设置列的宽度
|
||||||
|
weekColumn.Width = 140;
|
||||||
|
|
||||||
|
// 设置该列的Tag为周的开始日期(便于后续操作)
|
||||||
|
weekColumn.Tag = weekStart;
|
||||||
|
|
||||||
|
// 设置是否允许编辑
|
||||||
|
if (weekEnd >= DateTime.Today)
|
||||||
|
{
|
||||||
|
weekColumn.OptionsColumn.AllowEdit = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
weekColumn.OptionsColumn.AllowEdit = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
weekColumn.Visible = true; // 显示该列
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新到下一周
|
||||||
|
weekStart = weekEnd.AddDays(1); // 下一周的周一
|
||||||
|
weekIndex++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 隐藏多余的周列(超过15周的列)
|
||||||
|
foreach (int i in Enumerable.Range(weekIndex, 15 - weekIndex))
|
||||||
|
{
|
||||||
|
GridBand band = grid.BandedView.Bands.Cast<GridBand>()
|
||||||
|
.FirstOrDefault(b => b.Name == $"Week_{i}");
|
||||||
|
if (band != null) band.Visible = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 隐藏所有包含 Day_ 的列
|
||||||
|
foreach (var band in grid.BandedView.Bands.Cast<GridBand>())
|
||||||
|
{
|
||||||
|
if (band.Name.StartsWith("Day_"))
|
||||||
|
{
|
||||||
|
band.Visible = false;
|
||||||
|
foreach (BandedGridColumn column in band.Columns)
|
||||||
|
{
|
||||||
|
column.Visible = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取给定日期所在周的开始日期(周一)。
|
||||||
|
/// </summary>
|
||||||
|
private DateTime GetStartOfWeek(DateTime date)
|
||||||
|
{
|
||||||
|
// 这里假设一周是从周一开始的
|
||||||
|
int diff = (7 + (date.DayOfWeek - DayOfWeek.Monday)) % 7;
|
||||||
|
DateTime startOfWeek = date.AddDays(-diff);
|
||||||
|
return startOfWeek.Date; // 返回周一的日期
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 计算某个日期属于这一年的第几周
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="date">日期</param>
|
||||||
|
/// <returns>周数</returns>
|
||||||
|
private int GetWeekOfYear(DateTime date)
|
||||||
|
{
|
||||||
|
var cultureInfo = new CultureInfo("zh-CN");
|
||||||
|
var calendar = cultureInfo.Calendar;
|
||||||
|
return calendar.GetWeekOfYear(date, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private void UpdateDailyColumns(BandedGridControlEx grid, DateTime currentDate)
|
||||||
|
{
|
||||||
|
// 原有的日处理逻辑(保持原代码不变)
|
||||||
|
DateTime endDate = currentDate.AddMonths(3).AddDays(-1);
|
||||||
|
|
||||||
|
// 处理每天的列(现有逻辑)
|
||||||
for (int i = 0; i < 93; i++)
|
for (int i = 0; i < 93; i++)
|
||||||
{
|
{
|
||||||
// 以构建列时的命名规则 "Day_{i}" 查找对应的 GridBand
|
// 以构建列时的命名规则 "Day_{i}" 查找对应的 GridBand
|
||||||
string bandTitle = $"Day_{i}";
|
string bandTitle = $"Day_{i}";
|
||||||
GridBand gridBand = bandedGridControlEx.BandedView.Bands.Cast<GridBand>().FirstOrDefault(x => x.Name == bandTitle);
|
GridBand gridBand = grid.BandedView.Bands.Cast<GridBand>().FirstOrDefault(x => x.Name == bandTitle);
|
||||||
if (gridBand == null)
|
if (gridBand == null)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 假定每个 GridBand 下只有一个子列
|
// 假定每个 GridBand 下只有一个子列
|
||||||
BandedGridColumn gridColumn = gridBand.Columns.Count > 0 ? gridBand.Columns[0] : null;
|
BandedGridColumn gridColumn = gridBand.Columns.Count > 0 ? gridBand.Columns[0] : null;
|
||||||
if (gridColumn == null)
|
if (gridColumn == null)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 当前列对应的日期 = 起始日期加 i 天
|
// 当前列对应的日期 = 起始日期加 i 天
|
||||||
DateTime dateForColumn = currentDate.AddDays(i);
|
DateTime dateForColumn = currentDate.AddDays(i);
|
||||||
if (dateForColumn <= endDate)
|
if (dateForColumn <= endDate)
|
||||||
@@ -760,8 +978,9 @@ namespace Lskj.ProductiSched
|
|||||||
gridBand.Visible = true;
|
gridBand.Visible = true;
|
||||||
gridColumn.FieldName = dateForColumn.ToString("yyyy-MM-dd");
|
gridColumn.FieldName = dateForColumn.ToString("yyyy-MM-dd");
|
||||||
gridColumn.Caption = GetChineseWeekDayNumber(dateForColumn);
|
gridColumn.Caption = GetChineseWeekDayNumber(dateForColumn);
|
||||||
|
gridColumn.Width = 70;
|
||||||
gridColumn.Tag = dateForColumn;
|
gridColumn.Tag = dateForColumn;
|
||||||
if (bandedGridControlEx == bandGcTop)
|
if (grid == bandGcTop)
|
||||||
{
|
{
|
||||||
if (dateForColumn.Date < DateTime.Now.Date)
|
if (dateForColumn.Date < DateTime.Now.Date)
|
||||||
{
|
{
|
||||||
@@ -780,12 +999,22 @@ namespace Lskj.ProductiSched
|
|||||||
gridColumn.Visible = false;
|
gridColumn.Visible = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
//隐藏所有包含 week_ 的列
|
||||||
finally
|
foreach (var band in grid.BandedView.Bands.Cast<GridBand>())
|
||||||
{
|
{
|
||||||
bandedGridControlEx.BandedView.EndUpdate();
|
if (band.Name.StartsWith("Week_"))
|
||||||
|
{
|
||||||
|
band.Visible = false;
|
||||||
|
foreach (BandedGridColumn column in band.Columns)
|
||||||
|
{
|
||||||
|
column.Visible = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endregion
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 构建带日期的数据源
|
/// 构建带日期的数据源
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -793,11 +1022,12 @@ namespace Lskj.ProductiSched
|
|||||||
/// <param name="dataDayPlan"></param>
|
/// <param name="dataDayPlan"></param>
|
||||||
/// <param name="startDate"></param>
|
/// <param name="startDate"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
private DataTable MergeMainDataWithDayPlan(DataTable dataMain, DataTable dataDayPlan, DateTime startDate)
|
private DataTable MergeMainDataWithDayPlan(DataTable dataMain, DataTable dataDayPlan, DateTime startDate, string typeDate = "0")
|
||||||
{
|
{
|
||||||
string rightPrimaryKey = DataModel.RightModuleModel.ParmaryKey;
|
string rightPrimaryKey = DataModel.RightModuleModel.ParmaryKey;
|
||||||
string topPrimaryKey = DataModel.TopModuleModel.ParmaryKey;
|
string topPrimaryKey = DataModel.TopModuleModel.ParmaryKey;
|
||||||
DateTime endDate = startDate.AddMonths(3).AddDays(-1); // 计算结束日期
|
DateTime endDate = startDate.AddMonths(3).AddDays(-1); // 计算结束日期
|
||||||
|
|
||||||
// **1. 预索引 dataDayPlan 数据(billdocument_id -> 该 key 相关的所有行)**
|
// **1. 预索引 dataDayPlan 数据(billdocument_id -> 该 key 相关的所有行)**
|
||||||
Dictionary<string, List<DataRow>> dayPlanMap = new Dictionary<string, List<DataRow>>();
|
Dictionary<string, List<DataRow>> dayPlanMap = new Dictionary<string, List<DataRow>>();
|
||||||
foreach (DataRow row in dataDayPlan.Rows)
|
foreach (DataRow row in dataDayPlan.Rows)
|
||||||
@@ -809,6 +1039,7 @@ namespace Lskj.ProductiSched
|
|||||||
}
|
}
|
||||||
dayPlanMap[billId].Add(row);
|
dayPlanMap[billId].Add(row);
|
||||||
}
|
}
|
||||||
|
|
||||||
// **2. 预构建主数据的列**
|
// **2. 预构建主数据的列**
|
||||||
for (DateTime dt = startDate; dt <= endDate; dt = dt.AddDays(1))
|
for (DateTime dt = startDate; dt <= endDate; dt = dt.AddDays(1))
|
||||||
{
|
{
|
||||||
@@ -818,6 +1049,7 @@ namespace Lskj.ProductiSched
|
|||||||
dataMain.Columns.Add(colName, typeof(decimal)); // 确保列存在
|
dataMain.Columns.Add(colName, typeof(decimal)); // 确保列存在
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// **3. 预构建数据填充映射表**
|
// **3. 预构建数据填充映射表**
|
||||||
Dictionary<string, Dictionary<string, decimal>> dataMap = new Dictionary<string, Dictionary<string, decimal>>();
|
Dictionary<string, Dictionary<string, decimal>> dataMap = new Dictionary<string, Dictionary<string, decimal>>();
|
||||||
foreach (DataRow row in dataMain.Rows)
|
foreach (DataRow row in dataMain.Rows)
|
||||||
@@ -845,7 +1077,75 @@ namespace Lskj.ProductiSched
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// **4. 一次性填充 DataTable(避免逐行赋值带来的性能问题)**
|
|
||||||
|
// **4. 如果有报告(HasReport 为 true)且 typeDate 为 "1",合并同一周的数据**
|
||||||
|
if (DataModel.TopModuleModel.HasReport && typeDate == "1")
|
||||||
|
{
|
||||||
|
int weekIndex = 0;
|
||||||
|
DateTime tempStartDate = startDate;
|
||||||
|
|
||||||
|
while (tempStartDate <= endDate && weekIndex < 15)
|
||||||
|
{
|
||||||
|
DateTime weekEnd = tempStartDate.AddDays(6); // 计算本周的周日
|
||||||
|
|
||||||
|
// 为每个 key 存储合并的数据
|
||||||
|
Dictionary<string, decimal> weekSumMap = new Dictionary<string, decimal>();
|
||||||
|
|
||||||
|
// 查找当前周的所有列(如 03-01, 03-02, ...)
|
||||||
|
string weekColumnPrefix = $"{tempStartDate:yyyy-MM-dd}";
|
||||||
|
|
||||||
|
// 对每一天的列进行累加,合并到这一周的第一天
|
||||||
|
for (DateTime dt = tempStartDate; dt <= weekEnd && dt <= endDate; dt = dt.AddDays(1))
|
||||||
|
{
|
||||||
|
string colName = dt.ToString("yyyy-MM-dd"); // 使用 yyyy-MM-dd 格式
|
||||||
|
if (dataMain.Columns.Contains(colName))
|
||||||
|
{
|
||||||
|
foreach (DataRow row in dataMain.Rows)
|
||||||
|
{
|
||||||
|
string key = row[topPrimaryKey].ToString();
|
||||||
|
if (dataMap.ContainsKey(key) && dataMap[key].ContainsKey(colName))
|
||||||
|
{
|
||||||
|
// 累加数据并更新 weekSumMap
|
||||||
|
if (!weekSumMap.ContainsKey(key))
|
||||||
|
{
|
||||||
|
weekSumMap[key] = 0;
|
||||||
|
}
|
||||||
|
weekSumMap[key] += dataMap[key][colName]; // 累加当前列的数据
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 将合并的数据写入到周一(即第一天)的列
|
||||||
|
string firstDayCol = tempStartDate.ToString("yyyy-MM-dd"); // 使用 yyyy-MM-dd 格式
|
||||||
|
|
||||||
|
// 为每个 key 更新其对应的合并数据
|
||||||
|
foreach (DataRow row in dataMain.Rows)
|
||||||
|
{
|
||||||
|
string key = row[topPrimaryKey].ToString();
|
||||||
|
if (weekSumMap.ContainsKey(key))
|
||||||
|
{
|
||||||
|
row[firstDayCol] = weekSumMap[key]; // 设置周一的值为合并后的总和
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 隐藏其他非周一的列
|
||||||
|
for (DateTime dt = tempStartDate.AddDays(1); dt <= weekEnd && dt <= endDate; dt = dt.AddDays(1))
|
||||||
|
{
|
||||||
|
string colName = dt.ToString("yyyy-MM-dd"); // 使用 yyyy-MM-dd 格式
|
||||||
|
if (dataMain.Columns.Contains(colName))
|
||||||
|
{
|
||||||
|
dataMain.Columns[colName].ColumnMapping = MappingType.Hidden; // 将非周一列隐藏
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新到下一周
|
||||||
|
tempStartDate = weekEnd.AddDays(1); // 下一周的周一
|
||||||
|
weekIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// **5. 一次性填充 DataTable(避免逐行赋值带来的性能问题)**
|
||||||
foreach (DataRow row in dataMain.Rows)
|
foreach (DataRow row in dataMain.Rows)
|
||||||
{
|
{
|
||||||
string key = row[topPrimaryKey].ToString();
|
string key = row[topPrimaryKey].ToString();
|
||||||
@@ -859,6 +1159,7 @@ namespace Lskj.ProductiSched
|
|||||||
}
|
}
|
||||||
return dataMain;
|
return dataMain;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 构建带日期的数据源
|
/// 构建带日期的数据源
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -1002,14 +1303,24 @@ namespace Lskj.ProductiSched
|
|||||||
/// <param name="e"></param>
|
/// <param name="e"></param>
|
||||||
private void OnCustomDrawColumnHeader(object sender, ColumnHeaderCustomDrawEventArgs e)
|
private void OnCustomDrawColumnHeader(object sender, ColumnHeaderCustomDrawEventArgs e)
|
||||||
{
|
{
|
||||||
|
// 判断列的Tag是否为 DateTime
|
||||||
if (e.Column != null && e.Column.Tag != null && e.Column.Tag is DateTime dateTime)
|
if (e.Column != null && e.Column.Tag != null && e.Column.Tag is DateTime dateTime)
|
||||||
{
|
{
|
||||||
|
// 判断是否为周列,如果是周列则跳过标红
|
||||||
|
if (e.Column.Caption.StartsWith("第"))
|
||||||
|
{
|
||||||
|
return; // 跳过周列
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断日期是否为周末(星期六或星期日)
|
||||||
if (dateTime.DayOfWeek == DayOfWeek.Saturday || dateTime.DayOfWeek == DayOfWeek.Sunday)
|
if (dateTime.DayOfWeek == DayOfWeek.Saturday || dateTime.DayOfWeek == DayOfWeek.Sunday)
|
||||||
{
|
{
|
||||||
|
// 设置表头文字颜色为红色
|
||||||
e.Appearance.ForeColor = Color.Red;
|
e.Appearance.ForeColor = Color.Red;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 按键点击事件
|
/// 按键点击事件
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
Reference in New Issue
Block a user