我是Stack的新手,也是Delphi XE7的新手。
我被困在编程的某个特定部分;我一直在研究多设备应用程序,并使用livebindings设计器格式化了一个列表框。列表框显示了一个地址(house)的第一行,它位于livebindings的Item.text下,而属性的Postcode位于livebindings的Item.detail中。因此,列表框中的每个条目都具有从内部数据库中获取的第一行和地址的邮政编码。
当我向程序添加新地址时,我已设法使用完整地址更新数据库,并在运行时使用地址的第一行更新数据库,但是我不知道如何访问Item.detail部分运行时包含邮政编码。任何帮助将不胜感激
答案 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;