我正在使用带有一个TPopupColumn的fireMonkey网格。此列的项目已确定,并且在运行时也会发生变化。
问题是TpopupColumn.items中的更改仅反映在弹出列中新添加的行上,而旧版本中的更改包含旧项目(未更改)。
setlength(PointNames,NoMeasPoints);
setlength(PlaneNames,NoMeasPlanes);
PopupColumn1.Items.Clear;
Grid1.RowCount:=NoMeasPoints;
for i:=0 to NoMeasPlanes-1 do
begin
PlaneNames[i]:= 'Plane '+inttostr(i+1);
PopupColumn1.Items.Add(PlaneNames[i].ToString);
Grid1.Repaint;
end;
例如,如果PopupColumn1以一个单元格开头,其下拉列表中有一个项目,后来又添加了另一个单元格(行),项目中的项目也变为两个。第二个单元格在单击时显示两个项目,但第一个单元格仅显示从头开始的一个项目。
有没有办法在运行时更新单元格。
答案 0 :(得分:0)
我设法通过使用以下代码
来解决问题Procedure UpdateStringGrid1;
Var i,j:integer;
var item1:TPopupCell;
Begin
with MultiBalForm do
begin
Grid1.RowCount:=NoMeasPoints;
setlength(PointNames,NoMeasPoints);
setlength(PlaneNames,NoMeasPlanes);
PopupColumn1.Items.Clear;
popupcolumn1.DeleteChildren;
for J := 0 to NoMeasPoints-1 do
begin
item1:=TPopupCell.Create(popupcolumn1);
item1.Align:=TalignLayout.alTop;
item1.Height:=25;
for i:=0 to NoMeasPlanes-1 do
begin
PlaneNames[i]:='Plane ' + inttoStr(i+1);
item1.Items.Add(PlaneNames[i].ToString);
end;
PopupColumn1.AddObject(item1);
end;
end;
end;
每当我想使用“ DeleteChildren ”更新popcolumn.items并删除单元格,然后使用更新的项目创建新的popupcells时,我都会调用此过程。
这可能不是最好的方法。
答案 1 :(得分:0)
这适合我:
procedure TForm1.Button1Click(Sender: TObject);
var Cell: TFMXObject;
begin
if not (Grid1.Columns[0] is TPopupColumn) then
EXIT;
TPopupColumn(Grid1.Columns[0]).Items.Add('New Item');
for Cell in Grid1.Columns[0].Children do
if Cell is TPopupCell then
TPopupCell(Cell).Items.Assign(TPopupColumn(Grid1.Columns[0]).Items);
end;
只需使用适当的列索引或网格。