SVN-Revision: r962
This commit is contained in:
tdx
2025-09-03 08:18:21 +00:00
parent 659c410630
commit 84580a4a8d
+219 -334
View File
@@ -1211,180 +1211,112 @@ namespace Lskj.PubBill
} }
} }
} }
#region -/// DataSource=null
// ===================== 滚动条稳定-字段与去抖 =====================
// 只固定“最初存在的静态列”(一般是左侧来源等);动态日期/合计列永不固定
private HashSet<string> _baselineFixedFields;
// 防重入/去抖(避免短时间内重复重绑与布局抖动)
private volatile bool _mainRebindBusy = false;
private int _mainRebindScheduled = 0;
private DateTime _lastRebindAt = DateTime.MinValue;
private readonly TimeSpan _rebindDebounce = TimeSpan.FromMilliseconds(25);
// ===================== 数据文件刷新回调(列更新 + 请求重绑) =====================
// —— 替换你原来的 OnDataFileRefrshFile ——
// 只做列构建与视觉层更新;真正的数据重绑放到 RequestRebindPivot(异步执行)
private void OnDataFileRefrshFile(object sender, EventArgs e)
{
var gv = gcMain.GridView;
gv.BeginUpdate();
try
{
AddDataColumns(); // 只固定“基线静态列”,动态日期/合计列不固定
UpdateDynamicColumns(); // 日期列 FieldName/Caption/Tag
UpdateSummaryData(); // 你的汇总渲染逻辑(不改数据源)
}
finally
{
gv.EndUpdate();
}
// 不要在回调栈里直接改数据源;改为“请求重绑”,异步排队执行
RequestRebindPivot();
}
// ===================== 只固定基线静态列的列构建 —— 替换你的 AddDataColumns() =====================
private void AddDataColumns() private void AddDataColumns()
{ {
var gv = gcMain.GridView; foreach (GridColumn gridColumn in gcMain.GridView.Columns)
gv.BeginUpdate();
try
{ {
// 首次运行:记录“当下已有的列”为基线静态列(只固定这些列) gridColumn.Fixed = DevExpress.XtraGrid.Columns.FixedStyle.Left;
if (_baselineFixedFields == null)
{
_baselineFixedFields = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
foreach (DevExpress.XtraGrid.Columns.GridColumn c in gv.Columns)
{
if (!string.IsNullOrEmpty(c.FieldName))
_baselineFixedFields.Add(c.FieldName);
} }
}
// 先统一恢复:基线列固定到左侧,其他全部取消固定(含日期列/合计列)
foreach (DevExpress.XtraGrid.Columns.GridColumn c in gv.Columns)
{
if (!string.IsNullOrEmpty(c.FieldName) && _baselineFixedFields.Contains(c.FieldName))
c.Fixed = DevExpress.XtraGrid.Columns.FixedStyle.Left; // 静态列固定
else
c.Fixed = DevExpress.XtraGrid.Columns.FixedStyle.None; // 动态列不固定
}
// 读取天数
int dayCount = 0; int dayCount = 0;
BaseUserControl baseUserControl = ControlObj.FindControl("bom_rdm_tianshu"); BaseUserControl baseUserControl = ControlObj.FindControl("bom_rdm_tianshu");
if (baseUserControl != null) int.TryParse(baseUserControl.EditText, out dayCount); if (baseUserControl != null)
if (dayCount <= 0) dayCount = 7; {
int.TryParse(baseUserControl.EditText, out dayCount);
// 当天数变化:移除旧日期列与旧合计列,重建 }
if (dayCount <= 0)
{
dayCount = 7;
}
if (DateColumnList.Count != dayCount) if (DateColumnList.Count != dayCount)
{ {
// 删除旧日期列 foreach (GridColumn item in DateColumnList)
foreach (var item in DateColumnList)
{ {
if (item != null && gv.Columns.Contains(item)) gcMain.GridView.Columns.Remove(item);
gv.Columns.Remove(item);
} }
gcMain.GridView.Columns.Remove(SumGridColumn);
DateColumnList.Clear(); DateColumnList.Clear();
// 删除旧合计列
if (SumGridColumn != null && gv.Columns.Contains(SumGridColumn))
gv.Columns.Remove(SumGridColumn);
SumGridColumn = null;
// 新建日期列(默认不固定)
for (int i = 0; i < dayCount; i++) for (int i = 0; i < dayCount; i++)
{ {
var col = new DevExpress.XtraGrid.Columns.GridColumn(); GridColumn gridColumn = new GridColumn();
col.AppearanceCell.Options.UseTextOptions = true; gridColumn.AppearanceCell.Options.UseTextOptions = true;
col.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; gridColumn.AppearanceCell.TextOptions.HAlignment = HorzAlignment.Center;
col.AppearanceHeader.Options.UseTextOptions = true; gridColumn.AppearanceHeader.Options.UseTextOptions = true;
col.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; gridColumn.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center;
col.OptionsColumn.AllowMove = false; gridColumn.OptionsColumn.AllowMove = false;
col.OptionsColumn.AllowSize = true; gridColumn.OptionsColumn.AllowSize = false;
col.OptionsFilter.AllowFilter = false; gridColumn.OptionsFilter.AllowFilter = false;
col.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; gridColumn.OptionsColumn.AllowMerge = DefaultBoolean.False;
col.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.False; gridColumn.OptionsColumn.AllowSort = DefaultBoolean.False;
col.FieldName = $"DDay_{i}"; // 先占位;稍后 UpdateDynamicColumns 改成 yyyy-MM-dd gridColumn.FieldName = $"DDay_{i}";
col.Width = 70; gridColumn.Width = 70;
col.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Numeric; gridColumn.DisplayFormat.FormatType = FormatType.Numeric;
col.DisplayFormat.FormatString = "{0:#,##0.####}"; gridColumn.DisplayFormat.FormatString = "{0:#,##0.####}";
col.Visible = true; gridColumn.Visible = true;
col.SummaryItem.SummaryType = DevExpress.Data.SummaryItemType.Sum; gridColumn.SummaryItem.SummaryType = SummaryItemType.Sum;
col.SummaryItem.DisplayFormat = "{0:#,##0.####}"; gridColumn.SummaryItem.DisplayFormat = "{0:#,##0.####}";
col.Fixed = DevExpress.XtraGrid.Columns.FixedStyle.None; // 关键:不固定 gcMain.GridView.Columns.Add(gridColumn);
gv.Columns.Add(col); DateColumnList.Add(gridColumn);
DateColumnList.Add(col);
} }
GridColumn sumGridColumn = new GridColumn();
// 合计列(也不固定) sumGridColumn.AppearanceCell.Options.UseTextOptions = true;
var sum = new DevExpress.XtraGrid.Columns.GridColumn(); sumGridColumn.AppearanceCell.TextOptions.HAlignment = HorzAlignment.Center;
sum.AppearanceCell.Options.UseTextOptions = true; sumGridColumn.AppearanceHeader.Options.UseTextOptions = true;
sum.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; sumGridColumn.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center;
sum.AppearanceHeader.Options.UseTextOptions = true; sumGridColumn.OptionsColumn.AllowEdit = false;
sum.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; sumGridColumn.OptionsColumn.AllowMove = false;
sum.OptionsColumn.AllowEdit = false; sumGridColumn.OptionsColumn.AllowSize = false;
sum.OptionsColumn.AllowMove = false; sumGridColumn.OptionsFilter.AllowFilter = false;
sum.OptionsColumn.AllowSize = true; sumGridColumn.OptionsColumn.AllowMerge = DefaultBoolean.False;
sum.OptionsFilter.AllowFilter = false; sumGridColumn.OptionsColumn.AllowSort = DefaultBoolean.False;
sum.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; sumGridColumn.FieldName = $"workingsum";
sum.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.False; sumGridColumn.Caption = $"工时合计";
sum.FieldName = "workingsum"; sumGridColumn.Width = 70;
sum.Caption = "工时合计"; sumGridColumn.DisplayFormat.FormatType = FormatType.Numeric;
sum.Width = 70; sumGridColumn.DisplayFormat.FormatString = "{0:#,##0.####}";
sum.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Numeric; sumGridColumn.Visible = true;
sum.DisplayFormat.FormatString = "{0:#,##0.####}"; sumGridColumn.SummaryItem.SummaryType = SummaryItemType.Sum;
sum.Visible = true; sumGridColumn.SummaryItem.DisplayFormat = "{0:#,##0.####}";
sum.SummaryItem.SummaryType = DevExpress.Data.SummaryItemType.Sum; SumGridColumn = sumGridColumn;
sum.SummaryItem.DisplayFormat = "{0:#,##0.####}"; gcMain.GridView.Columns.Add(sumGridColumn);
sum.Fixed = DevExpress.XtraGrid.Columns.FixedStyle.None; // 关键:不固定
SumGridColumn = sum;
gv.Columns.Add(sum);
}
// 横向滚动策略:固定为非自适应宽度 + 始终显示水平滚动条,减少布局震荡
var gridView = gv as DevExpress.XtraGrid.Views.Grid.GridView;
if (gridView != null)
{
gridView.OptionsView.ColumnAutoWidth = false;
gridView.HorzScrollVisibility = DevExpress.XtraGrid.Views.Base.ScrollVisibility.Always;
}
}
finally
{
gv.EndUpdate();
} }
} }
/// <summary>
// ===================== 根据日期修改列状态(确保日期列不固定) —— 替换你的 UpdateDynamicColumns() ===================== /// 根据日期修改列状态
/// </summary>
/// <param name="currentDate"></param>
private void UpdateDynamicColumns() private void UpdateDynamicColumns()
{ {
DateTime currentDate = DateTime.Now; DateTime currentDate = DateTime.Now;
BaseUserControl dateUserControl = ControlObj.FindControl("bom_rdm_ksdt"); BaseUserControl dateUserControl = ControlObj.FindControl("bom_rdm_ksdt");
if (dateUserControl is LabelDateEdit labelDateEdit) if (dateUserControl is LabelDateEdit labelDateEdit)
{
currentDate = labelDateEdit.TextEdit.DateTime; currentDate = labelDateEdit.TextEdit.DateTime;
}
int dayCount = 0; int dayCount = 0;
BaseUserControl baseUserControl = ControlObj.FindControl("bom_rdm_tianshu"); BaseUserControl baseUserControl = ControlObj.FindControl("bom_rdm_tianshu");
if (baseUserControl != null) int.TryParse(baseUserControl.EditText, out dayCount); if (baseUserControl != null)
if (dayCount <= 0) dayCount = 7; {
int.TryParse(baseUserControl.EditText, out dayCount);
}
if (dayCount <= 0)
{
dayCount = 7;
}
DateTime endDate = currentDate.AddDays(dayCount); DateTime endDate = currentDate.AddDays(dayCount); // 保持你的原逻辑
var gv = gcMain.GridView; var view = gcMain.GridView;
gv.BeginUpdate(); view.BeginUpdate();
try try
{ {
// 1) 更新每个日期列的显示属性,并确保“动态列不固定”
for (int i = 0; i < DateColumnList.Count; i++) for (int i = 0; i < DateColumnList.Count; i++)
{ {
var gridColumn = DateColumnList[i]; GridColumn gridColumn = DateColumnList[i];
var dateForColumn = currentDate.AddDays(i); DateTime dateForColumn = currentDate.AddDays(i);
if (dateForColumn <= endDate) if (dateForColumn <= endDate)
{ {
@@ -1392,227 +1324,94 @@ namespace Lskj.PubBill
gridColumn.Caption = dateForColumn.ToString("MM-dd"); gridColumn.Caption = dateForColumn.ToString("MM-dd");
gridColumn.Visible = true; gridColumn.Visible = true;
gridColumn.Tag = dateForColumn; gridColumn.Tag = dateForColumn;
gridColumn.Fixed = DevExpress.XtraGrid.Columns.FixedStyle.None; // 保证不固定
// 关键:动态日期列不要固定,让它参与水平滚动
gridColumn.Fixed = DevExpress.XtraGrid.Columns.FixedStyle.None;
} }
else else
{ {
gridColumn.Visible = false; gridColumn.Visible = false;
} }
} }
if (SumGridColumn != null) SumGridColumn.Fixed = DevExpress.XtraGrid.Columns.FixedStyle.None;
// 合计列也不要固定(保持可水平滚动)
if (SumGridColumn != null)
SumGridColumn.Fixed = DevExpress.XtraGrid.Columns.FixedStyle.None;
// 2) 明确“从左到右”的可见顺序
// 先找到左侧固定列的最大 VisibleIndex,动态列排在它们之后
int baseIndex = 0;
foreach (GridColumn c in view.Columns)
{
if (c.Visible && c.Fixed == DevExpress.XtraGrid.Columns.FixedStyle.Left)
baseIndex = Math.Max(baseIndex, c.VisibleIndex + 1);
}
// 起始日期在左,依次向右:start, start+1, ...
int run = 0;
for (int i = 0; i < DateColumnList.Count; i++)
{
var col = DateColumnList[i];
if (!col.Visible) continue;
col.VisibleIndex = baseIndex + run;
run++;
}
// 合计列放在日期列最后
if (SumGridColumn != null && SumGridColumn.Visible)
SumGridColumn.VisibleIndex = baseIndex + run;
} }
finally finally
{ {
gv.EndUpdate(); view.EndUpdate();
} }
} }
/// <summary>
// ===================== 汇总更新(可保持你原实现,这里给出整洁版) —— 可选替换你的 UpdateSummaryData() ===================== /// 新增汇总数据(日期修改后)
/// </summary>
private void UpdateSummaryData(DataTable table = null) private void UpdateSummaryData(DataTable table = null)
{ {
DataTable dataTable = table; DataTable dataTable = new DataTable();
if (dataTable == null) if (table != null)
{
dataTable = table;
}
else
{ {
XtraTabPage tabPage = this.xtc_left_container.SelectedTabPage; XtraTabPage tabPage = this.xtc_left_container.SelectedTabPage;
BillSourceUnionModel model = tabPage?.Tag as BillSourceUnionModel; BillSourceUnionModel model = tabPage.Tag as BillSourceUnionModel;
if (model != null) if (model.GridControlObj != null)
{ {
if (model.ModelObj.sourceDetailType.Equals("1"))
dataTable = model.TreeGridDetailControlObj?.TreeListObj?.DataSource as DataTable;
else
dataTable = model.GridDetailControlObj?.GridControl?.DataSource as DataTable;
}
}
if (model.ModelObj.sourceDetailType.Equals("1"))
{
dataTable = model.TreeGridDetailControlObj.TreeListObj.DataSource as DataTable;
}
else
{
dataTable = model.GridDetailControlObj.GridControl.DataSource as DataTable;
}
}
}
if (dataTable != null && dataTable.Columns.Contains("num")) if (dataTable != null && dataTable.Columns.Contains("num"))
{ {
MultiLineSummary = true; MultiLineSummary = true;
gcMain.GridView.OptionsView.ShowFooter = true; gcMain.GridView.OptionsView.ShowFooter = true;
DataRow[] dataRows = dataTable.Select("num='999'"); DataRow[] dataRows = dataTable.Select("num='999'");
DataRow dataRow = (dataRows != null && dataRows.Length > 0) ? dataRows[0] : null; DataRow dataRow = dataRows != null && dataRows.Length > 0 ? dataRows[0] : null;
gcMain.AddHeadquarters(dataRow); gcMain.AddHeadquarters(dataRow);
} }
else if (MultiLineSummary) else if (MultiLineSummary)
{ {
MultiLineSummary = false; MultiLineSummary = false;
// 清空新加的汇总列 //清空新加的汇总列
gcMain.AddHeadquarters(); gcMain.AddHeadquarters();
} }
} }
// ===================== 数据源变化(外部真实变化时响应) —— 替换你的 OnGcMainDataSourceChanged =====================
private void OnGcMainDataSourceChanged(object sender, EventArgs e)
{
var grid = this.gcMain?.GridControl;
var view = grid?.MainView as DevExpress.XtraGrid.Views.Base.ColumnView;
var src = grid?.DataSource as DataTable;
if (grid == null || view == null) return;
if (src == null) return; // DataSource == null 的那次变化不处理(避免抖动)
if (DateColumnList == null || DateColumnList.Count == 0) return;
var tag = DateColumnList[0].Tag as DateTime?;
if (tag == null) return;
DateTime dateTime = tag.Value;
// 去抖:合并短时间内多次触发
if (DateTime.UtcNow - _lastRebindAt < _rebindDebounce)
{
System.Threading.Interlocked.Exchange(ref _mainRebindScheduled, 1);
this.BeginInvoke((Action)(() => SafeRebindPivot(grid, view, src, dateTime)));
return;
}
System.Threading.Interlocked.Exchange(ref _mainRebindScheduled, 1);
this.BeginInvoke((Action)(() => SafeRebindPivot(grid, view, src, dateTime)));
}
// ===================== 统一请求重绑入口(供内部自发刷新使用)—— 新增 =====================
private void RequestRebindPivot()
{
var grid = this.gcMain?.GridControl;
var view = grid?.MainView as DevExpress.XtraGrid.Views.Base.ColumnView;
var src = grid?.DataSource as DataTable;
if (grid == null || view == null || src == null) return;
if (DateColumnList == null || DateColumnList.Count == 0) return;
var tag = DateColumnList[0].Tag as DateTime?;
if (tag == null) return;
DateTime dateTime = tag.Value;
if (DateTime.UtcNow - _lastRebindAt < _rebindDebounce)
{
System.Threading.Interlocked.Exchange(ref _mainRebindScheduled, 1);
this.BeginInvoke((Action)(() => SafeRebindPivot(grid, view, src, dateTime)));
return;
}
System.Threading.Interlocked.Exchange(ref _mainRebindScheduled, 1);
this.BeginInvoke((Action)(() => SafeRebindPivot(grid, view, src, dateTime)));
}
// ===================== 重绑实现(批处理 + 不清空数据源 + 稳定滚动条) —— 替换/加入你的 SafeRebindPivot =====================
private void SafeRebindPivot(DevExpress.XtraGrid.GridControl grid,
DevExpress.XtraGrid.Views.Base.ColumnView view,
DataTable currentSource,
DateTime dateTime)
{
if (System.Threading.Interlocked.Exchange(ref _mainRebindScheduled, 0) == 0) return;
if (_mainRebindBusy) return;
_mainRebindBusy = true;
_lastRebindAt = DateTime.UtcNow;
try
{
grid.DataSourceChanged -= OnGcMainDataSourceChanged;
grid.BeginUpdate();
view.BeginDataUpdate();
this.SuspendLayout();
var src = currentSource;
if (src == null || src.Rows.Count == 0)
{
// 没数据直接收尾;不要 DataSource = null
return;
}
string billNo = (this.lblOrderNo?.Text ?? string.Empty).Replace("'", "''");
// 查询 ①:排除“计划文件”
string sqlExcludePlan = "SELECT * FROM RD_worktimetab WHERE 1=1"
+ $" AND lblOrderNo = '{billNo}'"
+ $" AND showday >= '{dateTime:yyyy-MM-dd}'"
+ " AND billdocument_id NOT LIKE N'计划文件%'";
DataTable dataNoPlanFile = BaseImpl.GetDataTableResult(sqlExcludePlan) ?? new DataTable();
// 查询 ②:只包含“计划文件”
string sqlIncludePlan = "SELECT billdocument_id FROM RD_worktimetab WHERE 1=1"
+ $" AND lblOrderNo = '{billNo}'"
+ $" AND showday >= '{dateTime:yyyy-MM-dd}'"
+ " AND billdocument_id LIKE N'计划文件%'";
DataTable dataOnlyPlanFile = BaseImpl.GetDataTableResult(sqlIncludePlan) ?? new DataTable();
// 复制成新表再加工(不要在当前绑定表上原地改)
DataTable result = src.Copy();
MergeMainDataWithDayPlan(result, dataNoPlanFile, dateTime); // 你自有实现:在 result 上做行转列/合并
// 绑定“新表”(严禁 DataSource=null 再赋值)
grid.DataSource = result;
grid.ForceInitialize();
// 稳定水平滚动条(不自适应宽度,始终显示)
var gv = view as DevExpress.XtraGrid.Views.Grid.GridView;
if (gv != null)
{
gv.OptionsView.ColumnAutoWidth = false;
gv.HorzScrollVisibility = DevExpress.XtraGrid.Views.Base.ScrollVisibility.Always;
// 如需避免首次列宽为 0,可按需:gv.BestFitColumns();
}
// 渲染“计划合计”(绑定之后)
if (dataOnlyPlanFile.Rows.Count > 0)
{
string jhrowtiemjson = (dataOnlyPlanFile.Rows[0]["billdocument_id"] + "").Replace("计划文件", "");
try
{
var rowObject = Newtonsoft.Json.Linq.JObject.Parse(jhrowtiemjson);
var arr = new Newtonsoft.Json.Linq.JArray(rowObject);
DataRow jhrowitem = Newtonsoft.Json.JsonConvert
.DeserializeObject<DataTable>(arr.ToString()).Rows[0];
gcMain.AddHeadquarters(jhrowitem);
}
catch { /* JSON 容错 */ }
}
// 如需无计划时清空:gcMain.AddHeadquarters(null);
gcMain.RefreshHeaderColor();
// 强制重建滚动信息 + 刷新 + 回到顶部
grid.ForceInitialize();
view.RefreshData();
if (gv != null) gv.TopRowIndex = 0;
}
finally
{
try { this.ResumeLayout(false); } catch { }
try { view.EndDataUpdate(); } catch { }
try { grid.EndUpdate(); } catch { }
try { grid.DataSourceChanged += OnGcMainDataSourceChanged; } catch { }
_mainRebindBusy = false;
// 若执行期间有新请求,合并再跑一次
if (System.Threading.Interlocked.Exchange(ref _mainRebindScheduled, 0) == 1)
{
this.BeginInvoke((Action)(() =>
{
var g = this.gcMain?.GridControl;
var v = g?.MainView as DevExpress.XtraGrid.Views.Base.ColumnView;
var s = g?.DataSource as DataTable;
if (g != null && v != null && s != null)
{
// 取当前起始日期
if (DateColumnList != null && DateColumnList.Count > 0)
{
var t = DateColumnList[0].Tag as DateTime?;
if (t != null) SafeRebindPivot(g, v, s, t.Value);
}
}
}));
}
}
}
#endregion
/// <summary> /// <summary>
/// <para>说明:表格编辑时,判断是否是否编辑</para> /// <para>说明:表格编辑时,判断是否是否编辑</para>
/// <para>创建人:王一帆</para> /// <para>创建人:王一帆</para>
@@ -2305,12 +2104,12 @@ namespace Lskj.PubBill
} }
searchControl.OnSearchBeforeCallBack += new SearchEventHandler(OnSearchBefore); searchControl.OnSearchBeforeCallBack += new SearchEventHandler(OnSearchBefore);
searchControl.OnSearchAfterCallBack += new EventHandler(OnSearchAfterd); searchControl.OnSearchAfterCallBack += new EventHandler(OnSearchAfterd);
if (i == 0 && !SystemInfo.Instance.IsBillSourceRefushTag.Equals("1")&&string.IsNullOrWhiteSpace(this.BillModel.InitialRefreshId)) if (i == 0 && !SystemInfo.Instance.IsBillSourceRefushTag.Equals("1") && string.IsNullOrWhiteSpace(this.BillModel.InitialRefreshId))
{ {
// 第一个页面要刷新数据,所以绑定事件用于初始化完成后在查询数据 // 第一个页面要刷新数据,所以绑定事件用于初始化完成后在查询数据
searchControl.OnDataSourceBindCallBack += new EventHandler(OnFirstPageDataSourceBindCallBack); searchControl.OnDataSourceBindCallBack += new EventHandler(OnFirstPageDataSourceBindCallBack);
} }
if (!string.IsNullOrWhiteSpace(this.BillModel.InitialRefreshId)&& this.BillModel.InitialRefreshId.Equals(model.Id+"")) if (!string.IsNullOrWhiteSpace(this.BillModel.InitialRefreshId) && this.BillModel.InitialRefreshId.Equals(model.Id + ""))
{ {
searchControl.OnDataSourceBindCallBack += SearchControl_OnDataSourceBindCallBack; searchControl.OnDataSourceBindCallBack += SearchControl_OnDataSourceBindCallBack;
InitialSelectionTab = tabPage; InitialSelectionTab = tabPage;
@@ -3733,6 +3532,34 @@ namespace Lskj.PubBill
} }
} }
} }
/// <summary>
/// <para>说明:刷新表格列(时间)</para>
/// <para>创建人:王一帆</para>
/// <para>创建日期:2018-08-16 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnDataFileRefrshFile(object sender, EventArgs e)
{
AddDataColumns();
UpdateDynamicColumns();
UpdateSummaryData();
// ✅ 新增:开启横向滚动(避免列宽自适应吃掉滚动条)
var gv = gcMain.GridView as DevExpress.XtraGrid.Views.Grid.GridView;
if (gv != null)
{
gv.OptionsView.ColumnAutoWidth = false;
gv.HorzScrollVisibility = DevExpress.XtraGrid.Views.Base.ScrollVisibility.Always;
}
// 你原来的手动刷新——保持
OnGcMainDataSourceChanged(gcMain.GridView, null);
}
/// <summary> /// <summary>
/// <para>说明:刷新单据来源明细</para> /// <para>说明:刷新单据来源明细</para>
@@ -6059,7 +5886,67 @@ namespace Lskj.PubBill
} }
} }
/// <summary>
/// 主表数据源改变时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnGcMainDataSourceChanged(object sender, EventArgs e)
{
if (DateColumnList.Count > 0 && DateColumnList[0].Tag is DateTime dateTime)
{
string billNo = this.lblOrderNo.Text;
this.gcMain.GridControl.DataSourceChanged -= OnGcMainDataSourceChanged;
DataTable dataTable = gcMain.GridControl.DataSource as DataTable;
if (dataTable != null)
{
//DataTable dataMain = dataTable.Copy();
//string sqlValue = "select * from RD_worktimetab where 1 = 1";
//sqlValue = $"{sqlValue} and lblOrderNo = '{billNo}' and showday >= '{dateTime.ToString("yyyy-MM-dd")}'";
//DataTable dataDayPlan = BaseImpl.GetDataTableResult(sqlValue);
//---------- 查询①:渲染表格排程” ----------
string sqlExcludePlan = "SELECT * FROM RD_worktimetab WHERE 1 = 1";
sqlExcludePlan += $" AND lblOrderNo = '{billNo}'";
sqlExcludePlan += $" AND showday >= '{dateTime:yyyy-MM-dd}'";
sqlExcludePlan += " AND billdocument_id NOT LIKE N'计划文件%'";
// 获取结果
DataTable dataNoPlanFile = BaseImpl.GetDataTableResult(sqlExcludePlan);
// ---------- 查询②:只包含“计划文件” ----------
string sqlIncludePlan = "SELECT billdocument_id FROM RD_worktimetab WHERE 1 = 1";
sqlIncludePlan += $" AND lblOrderNo = '{billNo}'";
sqlIncludePlan += $" AND showday >= '{dateTime:yyyy-MM-dd}'";
sqlIncludePlan += " AND billdocument_id LIKE N'计划文件%'";
// 获取结果
DataTable dataOnlyPlanFile = BaseImpl.GetDataTableResult(sqlIncludePlan);
MergeMainDataWithDayPlan(dataTable, dataNoPlanFile, dateTime);
//若存在缓存计划数据则渲染合计
if (dataOnlyPlanFile.Rows.Count > 0)
{
string jhrowtiemjson = (dataOnlyPlanFile.Rows[0]["billdocument_id"] + "").Replace("计划文件", "");
try
{
JObject rowObject = JsonConvert.DeserializeObject<JObject>(jhrowtiemjson);
JArray jArray = new JArray();
jArray.Add(rowObject);
DataRow jhrowitem = JsonConvert.DeserializeObject<DataTable>(JsonConvert.SerializeObject(jArray)).Rows[0];
//渲染计划合计
gcMain.AddHeadquarters(jhrowitem);
}
catch (Exception)
{
}
}
//else
//{
// gcMain.AddHeadquarters(null);
//}
gcMain.RefreshHeaderColor();
this.gcMain.GridControl.DataSource = null;
this.gcMain.GridControl.DataSource = dataTable;
}
this.gcMain.GridControl.DataSourceChanged += OnGcMainDataSourceChanged;
}
}
/// <summary> /// <summary>
/// 保存日计划变更数据(批量保存)。 /// 保存日计划变更数据(批量保存)。
@@ -9351,5 +9238,3 @@ namespace Lskj.PubBill
} }
else else
{ {
//刷新返回的单据号
thi