1

Delphi XE5 で FMX メトロポリス アプリケーションをコーディングしていたところ、データソースと TListBox の同期でエラーが発生しました。1 つまたは複数の項目を結合するグループ ヘッダーが存在するまでは、適切に機能します。ListBoxグループ内の( ListItemStyle= )の最初のアイテムを選択するとMetropolisUI、リストから消えます (見えなくなりますが、これはデータセット自体には影響しません)。

object LinkListControlToField1: TLinkListControlToField
      Category = 'Quick Bindings'
      DataSource = BindSourceDB1
      FieldName = 'name2'
      Control = ListBox1
      FillExpressions = <
        item
          SourceMemberName = 'photo_mini'
          ControlMemberName = 'Icon'
        end
        item
          SourceMemberName = 'diagnosis_short'
          ControlMemberName = 'Description'
        end
        item
          ControlMemberName = 'Title'
          CustomFormat = 'self.owner.name1.text+" "+self.owner.name2.text'
        end>
      ListItemStyle = 'MetropolisUI'
      AutoBufferCount = False
      FillHeaderExpressions = <>
      FillBreakFieldName = 'ward'
      FillHeaderCustomFormat = '"Ward "+ward.text'
      FillBreakGroups = <>
    end
  end

エラーを再現するために使用した次の単純化されたプロジェクトは、別の方法で動作していますが、問題の問題はほとんど同じです。PrototypeBindSource1: TPrototypeBindSource;(リテラル フィールドと整数フィールドを生成する) フォームのみが必要です。LiveBindings のリンクは次BindingsList1: TBindingsList; ListBox1: TListBox;Edit1: TEdit;とおりです。

object BindingsList1: TBindingsList
Methods = <>
OutputConverters = <>
Left = 20
Top = 5
object LinkListControlToField1: TLinkListControlToField
  Category = 'Quick Bindings'
  DataSource = PrototypeBindSource1
  FieldName = 'ContactName1'
  Control = ListBox1
  FillExpressions = <>
  AutoBufferCount = False
  FillHeaderExpressions = <>
  FillHeaderFieldName = 'UIntField1'
  FillBreakGroups = <>
end
object LinkControlToField1: TLinkControlToField
  Category = 'Quick Bindings'
  DataSource = PrototypeBindSource1
  FieldName = 'ContactName1'
  Control = Edit1
  Track = False
end

項目の選択が、DataSource (DataSet) で選択されたレコードの ID に対応していません。LiveBindings エンジンは、選択したレコードの実体ではなく、のItemIndexプロパティを同期しているようです。問題を解決する正しい方法はありますか?TListBoxid

ここに画像の説明を入力

4

1 に答える 1

0

私はライブ バインディングを使用しようとしましたが、些細なことから現実の世界に移行した瞬間に、それを機能させるためにジャンプしなければならないフープは、努力する価値がないことがわかりました。これは適切なケースだと思います。「彼らが考えたこと」 (1 アイテム = 1 レコード) を実行している間は問題ありませんが、そこから離れると、クイック バインディングを使用できなくなり、独自のカスタム バインディング クラスの構築を開始する必要があります。これには、はるかに深い理解が必要です。クイック バインディングよりもライブ バインディングのほうが優れていて、私の見解では、演習の対象を少し打ち負かしています。

だから、シンプルなやり方に固執したくないのでなければ、シンプルな答えはないと思います。

私の場合、XE2 を使用していましたが、XE5 で多くのことが進行していることを認識していません。

于 2015-07-07T16:00:08.817 に答える