' 窗口AfterLoad事件代码
Dim currentDate As Date = Date.Today
Dim dateConditions As New List(Of String)
Dim columnNames As New List(Of String)
'-------------------------------------------
' 步骤1:生成动态日期区间及列名
'-------------------------------------------
' 1. 今日以前
columnNames.Add("今日以前")
' 修正字符串拼接,使用 & 替代 $"" 插值
dateConditions.Add("CAST(DDEDT AS DATE) < '" & currentDate.ToString("yyyy-MM-dd") & "'")
' 2. 生成10个3天区间(从今日开始)
Dim startDate As Date = currentDate
For i As Integer = 0 To 9
Dim endDate As Date = startDate.AddDays(3)
columnNames.Add(endDate.ToString("M月d日"))
' 修正字符串拼接
dateConditions.Add("CAST(DDEDT AS DATE) BETWEEN '" & startDate.ToString("yyyy-MM-dd") & "' AND '" & endDate.AddDays( - 1).ToString("yyyy-MM-dd") & "'")
startDate = endDate
Next
' 3. 最后一个区间(最后一个3天区间的次日及以后)
Dim lastDate As Date = startDate
columnNames.Add(lastDate.ToString("M月d日") & "以后")
' 修正字符串拼接
dateConditions.Add("CAST(DDEDT AS DATE) >= '" & lastDate.ToString("yyyy-MM-dd") & "'")
'-------------------------------------------
' 步骤2:构建SQL统计
'-------------------------------------------
Dim bd As New SQLGroupTableBuilder("动态统计", "v_corder_no_debt_amt")
bd.C ' 指定数据库连接名
bd.Groups.AddDef("ccode")
For i As Integer = 0 To columnNames.Count - 1
Dim sqlExp As String = "SUM(CASE WHEN " & dateConditions(i) & " THEN (dqty - dsaleqty) ELSE 0 END)"
bd.Totals.AddExp(columnNames(i), sqlExp)
Next
'-------------------------------------------
' 步骤3:获取窗口中的表格并合并数据
'-------------------------------------------
Dim dtResult As fxDataSource = bd.BuildDataSource()
' 通过窗口中的控件名称获取表格(请根据实际控件名修改)
Dim recordGrid As WinForm.RecordGrid = e.Form.Controls("RecordGrid1")
If recordGrid Is Nothing Then
MessageBox.Show("未找到RecordGrid控件,请检查控件名称!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return
End If
Dim mainTable As DataTable = recordGrid.Table.DataTable ' 获取Table控件关联的DataTable
If mainTable Is Nothing Then
MessageBox.Show("RecordGrid未绑定表格!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return
End If
' 合并并自动添加缺失列
mainTable.Combine("ccode", dtResult, "ccode", True)
'-------------------------------------------
' 步骤4:列格式设置
'-------------------------------------------
For Each colName As String In columnNames
If mainTable.Columns.Contains(colName) Then
mainTable.Columns(colName).DataType = GetType(Decimal)
mainTable.Columns(colName).Caption = colName
End If
Next
' 自动调整列宽
mainTable.AutoSizeCols()
' 刷新表格显示
recordGrid.Refresh()

此主题相关图片如下:示例.png
