1
我創建了一個firemonkey(XE8)應用程序。 我的應用程序從XML文件讀取數據並從中填充memTable。 memTable綁定一個'ListView'。TFDMemTable和ListView
所有的工作都很好,但是這個過程非常緩慢。我嘗試使用progressbar
,但是當運行repeat
循環時,「凍結應用程序」並在ListView
完全填充時返回工作。
我該如何解決這個問題?
代碼:
procedure TForm2.layoutCatalogoClick(Sender: TObject);
var
Node: IXMLNode;
auxValor :Double;
begin
Label2.Visible := True;
mmtListaProdutos.Close;
mmtListaProdutos.CreateDataSet;
mmtListaProdutos.Open;
XMLDocument1.FileName := 'C:\dados\xml.xml';
XMLDocument1.Active := true;
Node := XMLDocument1.DocumentElement.ChildNodes.FindNode('produto');
Node.ChildNodes.First;
ProgressBar1.Max := node.ChildNodes.Count;
ProgressBar1.Value := 0;
repeat
ProgressBar1.Value := ProgressBar1.Value + 1;
auxValor := StrToFloat(Node.ChildNodes['valor_preco_a'].Text);
mmtListaProdutos.Append;
mmtListaProdutoscodigo.AsString := Node.ChildNodes['codigo'].Text;
mmtListaProdutosdescricao.AsString := Node.ChildNodes['descricao'].Text;
mmtListaProdutosreferencia.AsString := Node.ChildNodes['referencia'].Text;
mmtListaProdutoscodigo_EAN.AsString := Node.ChildNodes['codigo_EAN'].Text;
mmtListaProdutosgrupo.AsString := Node.ChildNodes['grupo'].Text;
mmtListaProdutosfornecedor.AsString := Node.ChildNodes['fornecedor'].Text;
mmtListaProdutosmarca.AsString := Node.ChildNodes['marca'].Text;
mmtListaProdutosunidade.AsString := Node.ChildNodes['unidade'].Text;
mmtListaProdutosvalidade.AsString := Node.ChildNodes['validade'].Text;
mmtListaProdutosvalor_preco_a.AsString := Node.ChildNodes['valor_preco_a'].Text;
mmtListaProdutosvalor_preco_b.AsString := Node.ChildNodes['valor_preco_b'].Text;
mmtListaProdutosaltura.AsString := Node.ChildNodes['altura'].Text;
mmtListaProdutoscomprimento.AsString := Node.ChildNodes['comprimento'].Text;
mmtListaProdutoslargura.AsString := Node.ChildNodes['largura'].Text;
mmtListaProdutoscodDesc.AsString := Node.ChildNodes['codigo'].Text + ' | ' + Node.ChildNodes['descricao'].Text;
mmtListaProdutosvalorUnd.AsString := 'R$ ' + FormatFloat('#.00', auxValor) + '/' + Node.ChildNodes['unidade'].Text;
mmtListaProdutosmarcaFornec.AsString := Node.ChildNodes['marca'].Text;
mmtListaProdutos.Post;
Node := Node.NextSibling;
until Node = nil;
mmtListaProdutos.First;
pnlListaProdutos.Visible := True;
pnlPrincipal.Visible := False;
end;
與緩慢無關,但您應該在'Repeat'循環之前檢查'Node = nil',以防沒有孩子 –