SVN-Revision: r961
This commit is contained in:
tdx
2025-09-03 03:49:55 +00:00
parent 3c6dff2ec5
commit 659c410630
+27 -18
View File
@@ -1211,7 +1211,10 @@ namespace Lskj.PubBill
}
}
}
#region -
#region -/// DataSource=null
// ===================== 滚动条稳定-字段与去抖 =====================
// 只固定“最初存在的静态列”(一般是左侧来源等);动态日期/合计列永不固定
private HashSet<string> _baselineFixedFields;
@@ -1220,9 +1223,11 @@ namespace Lskj.PubBill
private int _mainRebindScheduled = 0;
private DateTime _lastRebindAt = DateTime.MinValue;
private readonly TimeSpan _rebindDebounce = TimeSpan.FromMilliseconds(25);
#endregion
#region + OnDataFileRefrshFile
// ===================== 数据文件刷新回调(列更新 + 请求重绑) =====================
// —— 替换你原来的 OnDataFileRefrshFile ——
// 只做列构建与视觉层更新;真正的数据重绑放到 RequestRebindPivot(异步执行)
private void OnDataFileRefrshFile(object sender, EventArgs e)
{
var gv = gcMain.GridView;
@@ -1231,7 +1236,7 @@ namespace Lskj.PubBill
{
AddDataColumns(); // 只固定“基线静态列”,动态日期/合计列不固定
UpdateDynamicColumns(); // 日期列 FieldName/Caption/Tag
UpdateSummaryData(); // 你的汇总渲染逻辑
UpdateSummaryData(); // 你的汇总渲染逻辑(不改数据源)
}
finally
{
@@ -1241,9 +1246,9 @@ namespace Lskj.PubBill
// 不要在回调栈里直接改数据源;改为“请求重绑”,异步排队执行
RequestRebindPivot();
}
#endregion
#region 线 AddDataColumns()
// ===================== 只固定基线静态列的列构建 —— 替换你的 AddDataColumns() =====================
private void AddDataColumns()
{
var gv = gcMain.GridView;
@@ -1355,9 +1360,9 @@ namespace Lskj.PubBill
gv.EndUpdate();
}
}
#endregion
#region UpdateDynamicColumns()
// ===================== 根据日期修改列状态(确保日期列不固定) —— 替换你的 UpdateDynamicColumns() =====================
private void UpdateDynamicColumns()
{
DateTime currentDate = DateTime.Now;
@@ -1401,9 +1406,9 @@ namespace Lskj.PubBill
gv.EndUpdate();
}
}
#endregion
#region UpdateSummaryData()
// ===================== 汇总更新(可保持你原实现,这里给出整洁版) —— 可选替换你的 UpdateSummaryData() =====================
private void UpdateSummaryData(DataTable table = null)
{
DataTable dataTable = table;
@@ -1435,9 +1440,9 @@ namespace Lskj.PubBill
gcMain.AddHeadquarters();
}
}
#endregion
#region OnGcMainDataSourceChanged
// ===================== 数据源变化(外部真实变化时响应) —— 替换你的 OnGcMainDataSourceChanged =====================
private void OnGcMainDataSourceChanged(object sender, EventArgs e)
{
var grid = this.gcMain?.GridControl;
@@ -1462,9 +1467,9 @@ namespace Lskj.PubBill
System.Threading.Interlocked.Exchange(ref _mainRebindScheduled, 1);
this.BeginInvoke((Action)(() => SafeRebindPivot(grid, view, src, dateTime)));
}
#endregion
#region 使
// ===================== 统一请求重绑入口(供内部自发刷新使用)—— 新增 =====================
private void RequestRebindPivot()
{
var grid = this.gcMain?.GridControl;
@@ -1487,9 +1492,9 @@ namespace Lskj.PubBill
System.Threading.Interlocked.Exchange(ref _mainRebindScheduled, 1);
this.BeginInvoke((Action)(() => SafeRebindPivot(grid, view, src, dateTime)));
}
#endregion
#region + + / SafeRebindPivot
// ===================== 重绑实现(批处理 + 不清空数据源 + 稳定滚动条) —— 替换/加入你的 SafeRebindPivot =====================
private void SafeRebindPivot(DevExpress.XtraGrid.GridControl grid,
DevExpress.XtraGrid.Views.Base.ColumnView view,
DataTable currentSource,
@@ -1533,7 +1538,7 @@ namespace Lskj.PubBill
// 复制成新表再加工(不要在当前绑定表上原地改)
DataTable result = src.Copy();
MergeMainDataWithDayPlan(result, dataNoPlanFile, dateTime); // 你自有实现
MergeMainDataWithDayPlan(result, dataNoPlanFile, dateTime); // 你自有实现:在 result 上做行转列/合并
// 绑定“新表”(严禁 DataSource=null 再赋值)
grid.DataSource = result;
@@ -1545,6 +1550,7 @@ namespace Lskj.PubBill
{
gv.OptionsView.ColumnAutoWidth = false;
gv.HorzScrollVisibility = DevExpress.XtraGrid.Views.Base.ScrollVisibility.Always;
// 如需避免首次列宽为 0,可按需:gv.BestFitColumns();
}
// 渲染“计划合计”(绑定之后)
@@ -1601,10 +1607,12 @@ namespace Lskj.PubBill
}
}
}
#endregion
/// <summary>
/// <para>说明:表格编辑时,判断是否是否编辑</para>
/// <para>创建人:王一帆</para>
@@ -9343,4 +9351,5 @@ namespace Lskj.PubBill
}
else
{
//刷新返回的单据号
thi