0

我们的 Delphi 应用程序使用数据库绑定的 TcxGridDBColumns 让用户将 ISO 8601 格式的日期 (YYYY-MM-DD) 作为字符串进行操作。我想为最终用户提供一个基于日历的日期选择器。

TcxDateEditProperties不能(直接)使用,因为底层数据库使用字符串字段。因此,据我了解,我可以选择

  1. 在所有表中创建一个额外的日期列(TDateTime DB 字段),并将日期转换为 TDataSet 的 BeforePost 事件上的 ISO 8601 字符串列

  2. 创建一个自定义 Tcx***Properties 类。这可能涉及继承自TcxPopupEditProperties.

由于有很多表受到影响,我宁愿使用#2。你能指出帮助我的文件吗?还是有#3?

4

2 回答 2

0

有一个#3:不需要额外的列,DateEdit 可以理解当前系统格式(其中用户更改被写回)和 ISO 格式的字符串。在 BeforePost 中,我将系统格式转换回数据库中所需的 ISO。作为额外的奢侈,以下事件将现有的 ISO 日期更改为用户的默认日期格式:

procedure T_RVVorbereitung.cxGridAnalysisDateGetDataText(
  Sender: TcxCustomGridTableItem; ARecordIndex: Integer; var AText: string);
var
  ADate                                 : TDateTime;
begin
  try
    try
      ADate := TIso8601.DateTimeFromIso8601(AText);         // YYYY-MM-DD
    except
      ADate := StrToDate(AText);
    end;
    AText := DateToStr(ADate);
  except
    // neither system nor ISO date: show as it is
  end;
end;
于 2012-05-30T08:32:15.670 回答
0

如果您所说的文档是关于编写自定义组件的,那么您可以在此处查看创建自定义 Delphi 组件,以及 Delphi 附带的文档“组件编写器指南”pdf(它有关于自定义 DBGrid 和导航月份、年份和天也)。这可用于选项 2 的起点

于 2012-05-29T04:45:56.213 回答