列表框在运行时设置Item.Detail

时间:2014-11-27 11:29:39

标签: delphi listbox firemonkey delphi-xe7

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

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

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

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

感谢所有回答我问题的人。第一次在Stack Overflow上。我发布的最终代码正在努力帮助那些可能正在寻找类似结果的人。

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;

答案 2 :(得分:0)

美好的一天,从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;