我们的Delphi应用程序使用数据库绑定的TcxGridDBColumns让用户将ISO 8601格式的日期(YYYY-MM-DD)作为字符串进行操作。我想为最终用户提供基于日历的日期选择器。
由于底层数据库使用字符串字段,因此无法直接使用 TcxDateEditProperties
。所以据我所知,我选择了
在所有表格中创建一个额外的日期列(TDateTime数据库字段),并将日期转换为TDataSet的BeforePost事件上的ISO 8601字符串列
创建自定义Tcx ***属性类。这可能涉及继承TcxPopupEditProperties
。
由于受影响的表很多,我宁愿使用#2。你能指点帮助我的帮助文件吗?还是有#3?
答案 0 :(得分:0)
如果文档的意思是关于编写自定义组件,那么你可以在这里看到Creating Custom Delphi Components,以及Delphi附带的文档'Component Writer's Guide'pdf(它有关于自定义DBGrid和导航的示例几个月,一年和几天)。这可以用作选项2的起点
答案 1 :(得分: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;