-2
如何打開/加載數據從xml文件到delphi的tcxgrid?如何打開/加載數據從xml文件到delphi的tcxgrid?
如何打開/加載數據從xml文件到delphi的tcxgrid?如何打開/加載數據從xml文件到delphi的tcxgrid?
那麼我們走吧。首先你沒有提供任何XML數據所以我用這個:
<?xml version="1.0"?>
<Tests>
<Test TestId="0001" TestType="CMD">
<Name>Convert number to string</Name>
<CommandLine>Examp1.EXE</CommandLine>
<Input>1</Input>
<Output>One</Output>
</Test>
<Test TestId="0002" TestType="CMD">
<Name>Find succeeding characters</Name>
<CommandLine>Examp2.EXE</CommandLine>
<Input>abc</Input>
<Output>def</Output>
</Test>
<Test TestId="0003" TestType="GUI">
<Name>Convert multiple numbers to strings</Name>
<CommandLine>Examp2.EXE /Verbose</CommandLine>
<Input>123</Input>
<Output>One Two Three</Output>
</Test>
<Test TestId="0004" TestType="GUI">
<Name>Find correlated key</Name>
<CommandLine>Examp3.EXE</CommandLine>
<Input>a1</Input>
<Output>b1</Output>
</Test>
<Test TestId="0005" TestType="GUI">
<Name>Count characters</Name>
<CommandLine>FinalExamp.EXE</CommandLine>
<Input>This is a test</Input>
<Output>14</Output>
</Test>
<Test TestId="0006" TestType="GUI">
<Name>Another Test</Name>
<CommandLine>Examp2.EXE</CommandLine>
<Input>Test Input</Input>
<Output>10</Output>
</Test>
</Tests>
臨屋的數據名稱的test.xml
我用一個屬性來獲取下與EXEFILE一起保存名稱:
property XMLFileName: String read GetXMLFileName;
和實現:
function TForm8.GetXMLFileName: String;
begin
Result := ExtractFilePath(Application.ExeName) + 'test.xml';
end;
然後我的東西到XML文件轉換爲數據集:
procedure TForm8.DomToDataset(XMLNode: IXMLNode; Dataset: TDataset);
var
AttrNode: IXMLNode;
procedure CreateFields;
var
StringField: TStringField;
i: Integer;
ChildNode: IXMLNode;
begin
for i := 0 to AttrNode.ChildNodes.Count - 1 do
begin
ChildNode := AttrNode.ChildNodes.Get(i);
StringField := TStringField.Create(Dataset);
StringField.Size := 50;
StringField.FieldName := ChildNode.NodeName;
StringField.DisplayLabel := ChildNode.NodeName;
StringField.Dataset := Dataset;
StringField.Name := 'StringField' + IntToStr(Dataset.Fields.Count + 1);
end;
end;
var
i, J: Integer;
begin
Dataset.Close;
Dataset.Fields.Clear;
for i := 0 to XMLNode.ChildNodes.Count - 1 do
begin
AttrNode := XMLNode.ChildNodes.Get(i);
if Dataset.Fields.Count = 0 then
CreateFields;
Dataset.Open;
Dataset.Append;
try
for J := 0 to AttrNode.ChildNodes.Count - 1 do
Dataset.Fields[J].Value := AttrNode.ChildNodes.Get(J).NodeValue;
Dataset.Post;
except
Dataset.Cancel;
end;
end;
end;
這是遠遠不能perfrect,但它給你的照片。最後我們需要將它們結合在一起:
procedure TForm8.FillGrid;
var
XMLDocument: TXMLDocument;
i: Integer;
begin
XMLDocument := TXMLDocument.Create(nil);
XMLDocument.LoadFromFile(XMLFileName);
XMLDocument.Active := True;
DomToDataset(XMLDocument.DocumentElement, dxMemData1);
FreeAndNil(XMLDocument);
dxMemData1.Active := True;
cxGrid1DBTableView1.DataController.CreateAllItems;
for i := 0 to cxGrid1DBTableView1.ColumnCount - 1 do
cxGrid1DBTableView1.Columns[i].ApplyBestFit();
end;
這是一個好的開始。由於我沒有你的信息,我無法接近。希望你接受我的回答。
非常感謝您的回答,幫助了很多人。非常感激。 – Sharpie 2014-10-03 13:09:07
Delphi附帶一個XML Mapper工具,您可以使用它將XML轉換爲TClientDataSet可以使用的格式。然後,使用TXmlTransformProvider作爲CDS的輸入,CDS通過DataSource將數據提供給cxGrid。 OLH詳細解釋了這一點。 – MartynA 2014-09-25 15:46:25
StackOverflow是一個困難的社區。爲什麼人們如此迅速地投降(特別是初學者),而不是幫助改善問題? – Ampere 2014-09-25 20:50:51
@達格 - 改善你的問題,否則他們會關閉它。顯示您擁有的代碼並顯示問題。 – Ampere 2014-09-25 20:52:59