2012-05-29 134 views
0

我們的Delphi應用程序使用的數據庫綁定TcxGridDBColumns讓用戶操控ISO 8601格式的日期(YYYY-MM-DD)的字符串。我想爲最終用戶提供基於日曆的日期選擇器。ISO 8601字符串日期選擇器(德爾福的DevExpress)

TcxDateEditProperties不能用於(直接地)因爲底層數據庫使用一個字符串字段。所以我的理解我留下的選項

  1. 創建所有表中附加日期列(TDateTime類型DB場)和日期轉換爲ISO 8601字符串列上TDataSet的

  2. 的BeforePost事件
  3. 創建一個自定義Tcx *** Properties類。這可能涉及從TcxPopupEditProperties繼承。

由於受影響的表格很多,我寧願使用#2。你能指出幫助文件幫助我嗎?還是有#3?

+1

你問[DevEx支持(http://www.devexpress.com/Support/Center/Question /列表/ 1)?他們相當有幫助。 –

+0

感謝您的意見,是的,他們一直非常有幫助。 – gogowitsch

回答

0

如果你的文檔是關於編寫自定義組件的,那麼你可以在這裏看到Creating Custom Delphi Components,以及Delphi自帶的文檔'Component Writer's Guide'pdf(它有自定義DBGrid和瀏覽月份,年份還有幾天)。這可以用來啓動點選項二號

+0

我寧願使用DevExpress'ish解決方案,因爲我認爲它會導致最少數量的代碼行來維護。 – gogowitsch

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;