SVN r459
SVN-Revision: r459
This commit is contained in:
@@ -58,7 +58,7 @@ namespace Lskj.ProductiSched
|
|||||||
InitControlEvents();
|
InitControlEvents();
|
||||||
SetControlData();
|
SetControlData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取数据
|
/// 获取数据
|
||||||
@@ -1990,85 +1990,109 @@ namespace Lskj.ProductiSched
|
|||||||
}
|
}
|
||||||
|
|
||||||
// **5. 一次性填充 DataTable(避免逐行赋值带来的性能问题)**
|
// **5. 一次性填充 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// **6. 解决渲染问题**
|
|
||||||
bandGcTop.rowDateValues.Clear();
|
bandGcTop.rowDateValues.Clear();
|
||||||
if (!dataMain.Columns.Contains("PrecomputedMaxDate"))
|
if (!dataMain.Columns.Contains("PrecomputedMaxDate"))
|
||||||
{
|
{
|
||||||
dataMain.Columns.Add("PrecomputedMaxDate", typeof(string));
|
dataMain.Columns.Add("PrecomputedMaxDate", typeof(string));
|
||||||
}
|
}
|
||||||
// 遍历所有行
|
|
||||||
for (int rowIndex = 0; rowIndex < dataMain.Rows.Count; rowIndex++)
|
for (int rowIndex = 0; rowIndex < dataMain.Rows.Count; rowIndex++)
|
||||||
{
|
{
|
||||||
DataRow row = dataMain.Rows[rowIndex];
|
DataRow row = dataMain.Rows[rowIndex];
|
||||||
var validDateColumns = new List<DateTime>();
|
List<DateTime> validDateColumns = new List<DateTime>();
|
||||||
|
bandGcTop.rowDateValues[rowIndex] = validDateColumns;
|
||||||
// 遍历当前行所有列
|
string key = row[topPrimaryKey].ToString();
|
||||||
foreach (DataColumn column in dataMain.Columns)
|
if (dataMap.ContainsKey(key))
|
||||||
{
|
{
|
||||||
var cellValue = row[column]?.ToString();
|
foreach (var col in dataMap[key])
|
||||||
|
|
||||||
// 检查单元格值是否不为空,且可解析为日期格式
|
|
||||||
if (!string.IsNullOrEmpty(cellValue) && DateTime.TryParse(column.ToString(), out DateTime newDate))
|
|
||||||
{
|
{
|
||||||
if(!validDateColumns.Contains(newDate))validDateColumns.Add(newDate);
|
DataColumn column = row.Table.Columns[col.Key];
|
||||||
|
var cellValue = col.Value;
|
||||||
|
row[column] = cellValue;
|
||||||
|
// 检查列可解析为日期格式
|
||||||
|
if (cellValue > 0 && DateTime.TryParse(column.ToString(), out DateTime newDate))
|
||||||
|
{
|
||||||
|
if (!validDateColumns.Contains(newDate))
|
||||||
|
{
|
||||||
|
validDateColumns.Add(newDate);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 将当前行索引和有效日期列的集合添加到字典中
|
|
||||||
bandGcTop.rowDateValues[rowIndex] = validDateColumns;
|
|
||||||
// 赋值操作,确保为字符串格式
|
// 赋值操作,确保为字符串格式
|
||||||
row["PrecomputedMaxDate"] = validDateColumns.Count>0?validDateColumns.Max().ToString("yyyy-MM-dd"):"";
|
row["PrecomputedMaxDate"] = validDateColumns.Count > 0 ? validDateColumns.Max().ToString("yyyy-MM-dd") : "";
|
||||||
}
|
}
|
||||||
//if (!dataMain.Columns.Contains("PrecomputedMaxDate"))
|
dataMain.ColumnChanged += OnDataMainColumnChanged;
|
||||||
//{
|
|
||||||
// dataMain.Columns.Add("PrecomputedMaxDate", typeof(string));
|
|
||||||
//}
|
|
||||||
|
|
||||||
//foreach (DataRow row in dataMain.Rows)
|
|
||||||
//{
|
|
||||||
// DateTime? maxDate = null; // 初始化为 null,表示尚未找到有效日期
|
|
||||||
// foreach (DataColumn column in row.Table.Columns)
|
|
||||||
// {
|
|
||||||
// // 检查列是否为日期类型,这里假设您已确保列名适当反映了它们是日期类型
|
|
||||||
// if (DateTime.TryParse(column.ToString(), out DateTime tempDate))
|
|
||||||
// {
|
|
||||||
// if (!string.IsNullOrEmpty(row[column] + "")) // 只有在找到更大的日期时才更新
|
|
||||||
// {
|
|
||||||
// if (maxDate == null || tempDate > maxDate)
|
|
||||||
// {
|
|
||||||
// maxDate = tempDate;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// // 赋值操作,确保为字符串格式
|
|
||||||
// row["PrecomputedMaxDate"] = maxDate.HasValue ? maxDate.Value.ToString("yyyy-MM-dd") : "";
|
|
||||||
//}
|
|
||||||
return dataMain;
|
return dataMain;
|
||||||
}
|
}
|
||||||
/// <summary>
|
|
||||||
/// 构建带日期的数据源
|
/// <summary>
|
||||||
/// </summary>
|
/// 数据值改变时
|
||||||
/// <param name="focusedRow"></param>
|
/// </summary>
|
||||||
/// <param name="dataDayPlan"></param>
|
/// <param name="sender"></param>
|
||||||
/// <param name="startDate"></param>
|
/// <param name="e"></param>
|
||||||
/// <returns></returns>
|
private void OnDataMainColumnChanged(object sender, DataColumnChangeEventArgs e)
|
||||||
private void UpdateRowWithDayPlan(DataRow focusedRow, DataTable dataDayPlan, DateTime startDate)
|
{
|
||||||
|
DataTable dataMain = (DataTable)sender;
|
||||||
|
if (e.Column.ColumnName.Equals("PrecomputedMaxDate"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (dataMain != null && dataMain.Columns.Contains("PrecomputedMaxDate"))
|
||||||
|
{
|
||||||
|
var value = e.Row[e.Column];
|
||||||
|
int rowHandle = dataMain.Rows.IndexOf(e.Row);
|
||||||
|
DateTime? maxDate = null; // 初始化为 null,表示尚未找到有效日期
|
||||||
|
bool isdatefile = DateTime.TryParse(e.Column.ColumnName, out DateTime tempDate);//获取改变当前列日期
|
||||||
|
bool isMaxDatefile = bandGcTop.rowDateValues.TryGetValue(rowHandle, out List<DateTime> currentRowDateColumns);//获取记录日期
|
||||||
|
if (isdatefile)
|
||||||
|
{
|
||||||
|
if (isMaxDatefile && currentRowDateColumns.Count > 0)
|
||||||
|
{
|
||||||
|
List<DateTime> mvalidDateColumns = bandGcTop.rowDateValues[rowHandle];
|
||||||
|
if (tempDate > currentRowDateColumns.Max()) // 只有在找到更大的日期时才更新
|
||||||
|
{
|
||||||
|
if (decimal.TryParse(value + "", out decimal dValue) && dValue > 0)
|
||||||
|
{
|
||||||
|
mvalidDateColumns.Add(tempDate);
|
||||||
|
e.Row["PrecomputedMaxDate"] = tempDate.ToString("yyyy-MM-dd");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (tempDate == currentRowDateColumns.Max() && string.IsNullOrEmpty(value + ""))
|
||||||
|
{
|
||||||
|
bandGcTop.rowDateValues[rowHandle].Remove(tempDate);
|
||||||
|
e.Row["PrecomputedMaxDate"] = currentRowDateColumns.Count > 0 ? currentRowDateColumns.Max().ToString("yyyy-MM-dd") : "";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!mvalidDateColumns.Contains(tempDate))
|
||||||
|
{
|
||||||
|
mvalidDateColumns.Add(tempDate);
|
||||||
|
}
|
||||||
|
e.Row["PrecomputedMaxDate"] = tempDate.ToString("yyyy-MM-dd");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (decimal.TryParse(value + "", out decimal dValue) && dValue > 0)
|
||||||
|
{
|
||||||
|
bandGcTop.rowDateValues[rowHandle].Add(tempDate);
|
||||||
|
e.Row["PrecomputedMaxDate"] = tempDate.ToString("yyyy-MM-dd");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 构建带日期的数据源
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="focusedRow"></param>
|
||||||
|
/// <param name="dataDayPlan"></param>
|
||||||
|
/// <param name="startDate"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
private void UpdateRowWithDayPlan(DataRow focusedRow, DataTable dataDayPlan, DateTime startDate)
|
||||||
{
|
{
|
||||||
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)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user