1

我是 Stack Overflow 的新手,也是 Delphi XE7 的新手。

我被困在编程的特定部分;我一直在研究多设备应用程序,并使用 livebindings 设计器格式化了一个列表框。列表框显示地址(房屋)的第一行,该地址位于 livebindings 中的 Item.text 下,属性的 Postcode 位于 livebindings 中的 Item.detail 中。因此,列表框中的每个条目都有第一行和地址的邮政编码,它们取自内部数据库。

当我向程序添加新地址时,我设法在运行时用完整地址更新数据库,用地址的第一行更新列表框,但是我不知道如何在运行时访问 Item.detail 部分以包含邮政编码。任何帮助将非常感激

4

3 回答 3

2

“...如何在运行时访问 Item.detail 部分”

请参阅FMX.ListBox.TListBoxItem.ItemData

通过以下方式在运行时访问它:

aPostCodeString := ListBoxItem.ItemData.Detail; // When reading
ListBoxItem.ItemData.Detail := aPostCodeString; // When writing

将项目添加到列表框时,同时引用该项目:

var
  ListBoxItem : TListboxItem;
...
ListBoxItem := ListBox.Items.Add(someText);
ListBoxItem.ItemData.Detail := aPostCodeString;
于 2014-11-27T12:16:06.607 回答
1

美好的一天,可以通过以下过程从 ClientDataSet 填充 ListBox

procedure TfPpal.setListBox;
var
  ListItem : TListBoxItem;
begin
  ListBox.BeginUpdate;
  cdsDataSet.First;
  while not cdsDataSet.Eof do
  begin
    ListItem := TListBoxItem.Create(ListBox);
    ListItem.Text        := cdsDataSet.FieldByName('id').Text;
    ListItem.ImageIndex  := 1;
    ListItem.Height      := 61;
    ListItem.StyleLookup := 'listboxitemnodetail';
    ListItem.ItemData.Accessory := TListBoxItemData.TAccessory.aMore;
    LisxBox.AddObject(ListItem);
    cdsDataSet.Next;
  end;
  lbxLisxBox.Height  := 50 + (cdsDataSet.RecNo * 61);
  ListBox.EndUpdate;
end;
于 2017-05-22T23:13:27.457 回答
0

感谢所有回答我问题的人。第一次上堆栈溢出。我正在发布最终代码,该代码现在正在帮助任何可能正在寻找类似结果的人。

procedure TForm1.Button2Click(Sender: TObject);
Var
  Item: TListBoxItem;
begin
  Layout13.Visible := False;
  Layout2.Visible := True;
  MultiView1.Enabled := True;
  Button1.Enabled := True;
  ButtonDelete1.Enabled := True;
  Button2.Enabled := False;
     // setup SQLite in-memory connection
  FDConnection1.DriverName := 'SQLite';
  FDConnection1.Connected := True;
with fdqueryInsert do
  begin
    // write new address to database
    Insert;
    fieldbyname('Address1').asstring := edit1.text;
    fieldbyname('Address2').asstring := edit2.text;
    fieldbyname('City').asstring := edit3.text;
    fieldbyname('County').asstring := edit4.text;
    fieldbyname('Postcode').asstring := edit5.text;
    post;
    close;
    open;
  End;
    // draw address line and postcode to listbox
    ListBox2.Clear;
    ListBox2.BeginUpdate;
    FDQueryUpdate.Close;
    FDQueryUpdate.SQL.Text := 'SELECT Address1, Postcode FROM Address';
    try
      FDQueryUpdate.Open;
      Item := TlistBoxItem.Create(ListBox2);
      while not FDQueryUpdate.Eof do
      begin
      // create and format listbox to show bottomdetail
        Item := TlistBoxItem.Create(ListBox2);
        Item.StyleLookup := 'listboxitembottomdetail';
        // draw address to text part and postcode to bottom detail of Listbox item
        Item.Text := (FDQueryUpdate.Fields[0].AsString);
        Item.ItemData.Detail := (FDQueryUpdate.Fields[1].AsString);;
        ListBox2.AddObject( Item );
        FDQueryUpdate.Next;
      end;
    finally
    ListBox2.EndUpdate;
    FDQueryUpdate.Close;
  end;
  // clear editboxes and reset for next address input
  Button7Click(Sender);
end;
于 2014-11-28T09:29:58.913 回答