我正在尝试设计一个多用途的组织按钮。
按钮下方是一个包含数据的子表单(名为 ProjectQSubF)。虽然我们只关注一组数据,假设这个数据名为 ProjectComplete 并且是一个布尔 Y/N(复选框)字段。
我想设计一个按钮,当您单击它时,如果选中检查(是),它会对所有这些字段进行排序。如果再次单击该按钮,它会按未选中(否)的相反状态对其进行排序。如果您继续单击它,它只会在这两种状态之间来回切换。
我该怎么做?
另外,我将如何处理日期;基于更近和最远的两个州?
创建一行(或复选框或其他)。将其设置为可见 = false;
使用标签值(/checked 状态)来保存一个常量,比如 True 或 False;将对象命名为 isSortAscending 或类似名称;
在您的按钮的点击事件中:
isSortAscending.Tag = (not cbool(isSortAscending.Tag)) 'switch state to the opposite
dim ss as string: ss = ProjectQSubF.Form.RecordSource 'get the existing data query
ss = left(ss, instr(ss, "ORDER BY") - 1) 'chop off the existing sort logic
if isSortAscending.Tag = True then
ProjectQSubF.Form.RecordSource = ss & "ORDER BY yourColumnName"
else
ProjectQSubF.Form.RecordSource = ss & "ORDER BY yourColumnName DESC"
end if
与日期类似,DESC 表示最新的优先,ASC(或简单地没有“DESC” - 如我上面的代码中所示)表示最旧的优先。
无论您使用的是日期还是真/假列,您可能都不想将排序限制为仅此列,因为您正在使用的列的任何一个值都可能存在多行,并且此列中的行将那么可能看起来是未排序的,所以我建议在上面的 order by 语句之后附加“,nameofMainTextColumn”。
希望这可以帮助