開発ブログ - LiveBindingsカテゴリのエントリ
良くありますよね、%表示したい時って。
だから LiveBindings の CustomFormat に
って書いたのですが、「書式文字列 'Format(... は正しくないか引数の型と一致しません.」というエラーが出てしまいます。
だから LiveBindings の CustomFormat に
Format('%.0f', Self.Value*100) + "%"
って書いたのですが、「書式文字列 'Format(... は正しくないか引数の型と一致しません.」というエラーが出てしまいます。
列挙型のプロパティのあるクラスを TCustomAdapterBindSource などでバインドソースにしたのですが、列挙型のプロパティは LiveBindingデザイナに出てきませんでした。
仕方がないので、Integer にキャストしたプロパティを作って、そこから値をマップしました。
もしかしたら * と Owner を使った技で回避できるかも?
と思ってやってみましたが、うまくいきませんでした。
そもそも FindField で見つけることができませんね。
Object ならアクセスできるのですが...
LiveBindings CustomFormat で * と Self を使う
仕方がないので、Integer にキャストしたプロパティを作って、そこから値をマップしました。
もしかしたら * と Owner を使った技で回避できるかも?
と思ってやってみましたが、うまくいきませんでした。
そもそも FindField で見つけることができませんね。
Object ならアクセスできるのですが...
LiveBindings CustomFormat で * と Self を使う
LiveBindings のカスタム書式ではいくつかのデフォルトの LiveBinding メソッドが使えますが、これだけではなかなかきついですよね。
そんな時には独自のカスタム LiveBinding メソッドを作ることができます。
決まった書き方で関数を作成してパッケージとしてインストールする必要がありますが...
カスタム LiveBinding メソッドの作成
作成したカスタムメソッドがデザイン画面では使えるのに、実行時にエラーが発生する場合には uses に追加すれば使えるようになると思います。
そんな時には独自のカスタム LiveBinding メソッドを作ることができます。
決まった書き方で関数を作成してパッケージとしてインストールする必要がありますが...
カスタム LiveBinding メソッドの作成
作成したカスタムメソッドがデザイン画面では使えるのに、実行時にエラーが発生する場合には uses に追加すれば使えるようになると思います。
TListBindSourceAdapter などを使ってオブジェクトをバインドして使うときに
TBindExpression の SourceExpression で、単純にフィールド名を書くとエラーになってしまいます。
と書く必要があるんですね。
LiveBindings 書式設定式に書けるメソッドには
Format(<書式文字列>, <引数 1>, <引数 2>, …)
IfThen(<条件>, <真の場合の値>, <偽の場合の値>)
Lookup(<スコープ ルックアップ>, <キー フィールド>, <キー値>, <結果フィールド>)
など、その他使える式は以下にあります。
デフォルトの LiveBinding メソッド
http://docwiki.embarcadero.com/RADStudio/XE6/en/Default_LiveBindings_Methods
TBindExpression の SourceExpression で、単純にフィールド名を書くとエラーになってしまいます。
FieldName.Value
と書く必要があるんですね。
LiveBindings 書式設定式に書けるメソッドには
Format(<書式文字列>, <引数 1>, <引数 2>, …)
IfThen(<条件>, <真の場合の値>, <偽の場合の値>)
Lookup(<スコープ ルックアップ>, <キー フィールド>, <キー値>, <結果フィールド>)
など、その他使える式は以下にあります。
デフォルトの LiveBinding メソッド
http://docwiki.embarcadero.com/RADStudio/XE6/en/Default_LiveBindings_Methods
BindSource に対して Locate を使う?
Locate(KeyField, KeyValue)
この時 LiveBindings の設定は
ComboBoxのSynch <-> BindSourceの *
ComboBoxのItem.Text <- BindSourceの 表示フィールド
となっていなければならない
Delphi XE5
Locate(KeyField, KeyValue)
この時 LiveBindings の設定は
ComboBoxのSynch <-> BindSourceの *
ComboBoxのItem.Text <- BindSourceの 表示フィールド
となっていなければならない
Delphi XE5
クラスからバインドして表示する
TAdapterBindSource と TDataGeneratorAdapter
(1) まずは二つを配置
(2) AdapterBindSource の Adapter プロパティに DataGeneratorAdapter をセット
(3) AdapterBindSource の OnCreateAdapter イベントで
TObjectBindSourceAdapter
または
TListBindSourceAdapter
を生成する
または
クラスにバインドできるってうれしい
http://docwiki.embarcadero.com/RADStudio/XE3/ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%EF%BC%9ATAdapterBindSource_%E3%81%A8%EF%BC%BBLiveBinding_%E3%83%87%E3%82%B6%E3%82%A4%E3%83%8A%EF%BC%BD%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B
TAdapterBindSource と TDataGeneratorAdapter
(1) まずは二つを配置
(2) AdapterBindSource の Adapter プロパティに DataGeneratorAdapter をセット
(3) AdapterBindSource の OnCreateAdapter イベントで
TObjectBindSourceAdapter
または
TListBindSourceAdapter
を生成する
procedure TMain.AdapterBindSource1CreateAdapter(Sender: TObject; var ABindSourceAdapter: TBindSourceAdapter);
var
LEmployee: TEmployee;
begin
LEmployee := TEmployee.Create('John', 'Anders', 26, StrToDate('10/10/2011'), 'Developer', 'Adrian Hermann');
ABindSourceAdapter := TObjectBindSourceAdapter<TEmployee>.Create(Self, LEmployee);
end;
または
procedure TMain.AdapterBindSource1CreateAdapter(Sender: TObject; var ABindSourceAdapter: TBindSourceAdapter);
var
LList: TObjectList<TEmployee>;
begin
LList := TObjectList<TEmployee>.Create;
LList.Add(TEmployee.Create('John', 'Anders', 26, StrToDate('10/10/2011'), 'Developer', 'Adrian Hermann'));
ABindSourceAdapter := TListBindSourceAdapter<TEmployee>.Create(Self, LList, True);
end;
クラスにバインドできるってうれしい
http://docwiki.embarcadero.com/RADStudio/XE3/ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%EF%BC%9ATAdapterBindSource_%E3%81%A8%EF%BC%BBLiveBinding_%E3%83%87%E3%82%B6%E3%82%A4%E3%83%8A%EF%BC%BD%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B