あなたの質問を 100% 理解しているかどうかわかりません。私はあなたが何を意味するのか分かりません
TdxDBTreeListColumn.OnFilterStringUnformat によって提供される機能を実装して、ユーザーが指定した表示値を基になるデータセットに格納されている値に変換できるようにする方法に行き詰まっています。
まず、小さな例を作成しました。
日付フィールドを含む新しい TdxMemtable を追加し、それを tcxGrid にリンクして、いくつかのランダム データを追加しました。
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
BeginOfYear: TDateTime;
begin
Randomize;
dxMemData1.Active := true;
dxMemData1.DisableControls;
BeginOfYear := EncodeDate(2015, 1, 1);
for i := 0 to 500 do
dxMemData1.AppendRecord([i, Random(Trunc(Date - BeginOfYear)) + BeginOfYear]);
dxMemData1.EnableControls;
end;
次に、列に OnGetFilterDisplayText イベントを与えました。
procedure TForm1.cxGrid1DBTableView1Field2GetFilterDisplayText(Sender: TcxCustomGridTableItem; const AValue: Variant; var ADisplayText: string);
begin
if VarIsType(AValue, varDate) then
ADisplayText := FormatDateTime(FormatSettings.LongDateFormat, AValue);
end;
そして、それは私が望んでいた結果を私に与えます:
OnGetFilterDisplayText
イベントなし:

そしてOnGetFilterDisplayText
イベントで:

ご覧のとおり、内部データを変更せずに、フィルター ボックス内のテキストを書式設定しました。
最後に、列に を追加して、必要な形式でデータを表示しますOnGetDataText
。
procedure TForm1.cxGrid1DBTableView1Field1GetDataText(Sender: TcxCustomGridTableItem; ARecordIndex: Integer; var AText: string);
var
aDateTime: TDateTime;
begin
if TryStrToDate(AText, aDateTime) then
AText := FormatDateTime(FormatSettings.LongDateFormat, aDateTime);
end;
そして、ここに結果があります:

後:

このようにすることで、データセット内のデータを内部形式で保持しながら、ユーザーごとに表示することができます。
画面上の元のデータ値とデータ値を取得する方法を示すために、2 つの tcxEdit と AfterScrollEcent を mu データセットに追加しました。
procedure TMainForm.gridDBTableView1FocusedRecordChanged(Sender: TcxCustomGridTableView; APrevFocusedRecord, AFocusedRecord: TcxCustomGridRecord; ANewItemRecordFocusingChanged: Boolean);
var
Index: Integer;
begin
if AFocusedRecord = nil then
exit;
Index := gridDBTableView1time_field.Index;
cxTextEdit1.Text := AFocusedRecord.Values[Index];
cxTextEdit2.Text := AFocusedRecord.DisplayTexts[Index];
end;
結果は次のとおりです。

これまでのところ、希望どおりにデータが表示されており、ヘッダーからのフィルタリングは可能ですが、カスタム フィルタリングを選択するとエラーが発生します。
その作業を行うには、TcxFilterComboBoxHelper
子孫を作成する必要がありますか?
type
TmyFilterComboBoxHelper = class(TcxFilterComboBoxHelper)
private
class function TryLongDateFormatToDate(const S: string; out Value: TDateTime): Boolean;
class function TryStringToMilliseconds(const S: string; out Value: Int64): Boolean;
public
class procedure GetFilterValue(AEdit: TcxCustomEdit; AEditProperties: TcxCustomEditProperties; var V: Variant; var S: TCaption); override;
end;
完全なコードはここにあります:
http://pastebin.com/A1NRNg2J