CODE
Unit xmlkram;
interface
uses NxGrid, simploxml;
function formxmlbegin(inhalt : string) : string;
function formxmlend(inhalt : string) : string;
function formxml(name,inhalt : string) : string;
function getxml(xml_var : TsimploXML; kategorie, inhalt : string; stufe2 : string = ''; typ : integer =1) : string;
function nextgrid_importfromxml(grid : TNextGrid; xmlname, xmldata : string; hdr : boolean = false): boolean;
function nxgrid_ExportToXml(const NextGrid: TNextGrid; gridname : string = ''; hdr : boolean = true) : string;
implementation
uses NxCustomGridControl, NxColumnClasses, NxColumns, Classes, Dialogs,
IniFiles, StrUtils, SysUtils, Variants, NxCustomGrid;
function nxgrid_ExportToXml(const NextGrid: TNextGrid; gridname : string = ''; hdr : boolean = true) : string;
var strl : TStringlist;
c, r : integer;
_c, _r : string;
stmp : string;
begin
strl := TStringList.Create;
if hdr then begin
strl.Add('<?xml version="1.0" encoding="ISO-8859-1"?>');
strl.Add(formxmlbegin('standalone'));
end;
if gridname = '' then gridname := nextgrid.Name;
strl.Add(formxmlbegin(gridname));
with nextgrid do begin
strl.Add(formxml('Zeilen',inttostr(rowcount)));
strl.Add(formxml('Spalten',inttostr(Columns.Count)));
for c := 0 to Columns.Count - 1 do begin
strl.Add(formxml('spaltentyp'+inttostr©,columns[c].ClassName));
strl.Add(formxml('spaltenheader'+inttostr©,columns[c].Header.Caption));
strl.Add(formxml('spaltenname'+inttostr©,columns[c].name));
strl.Add(formxml('spaltensortierung'+inttostr©,inttostr(ord(columns[c].SortKind))));
strl.Add(formxml('spaltenvisible'+inttostr©,inttostr(ord(columns[c].visible))));
strl.Add(formxml('spaltenbreite'+inttostr©,inttostr(columns[c].Width)));
strl.Add(formxml('spaltenposition'+inttostr©,inttostr(columns[c].Position)));
strl.Add(formxml('spaltenfooter'+inttostr©,columns[c].Footer.Caption));
end;
for r := 0 to rowcount - 1 do begin
_r := 'zeile'+inttostr®;
strl.Add(formxmlbegin(_r));
for c := 0 to Columns.Count - 1 do begin
_c := 'spalte'+inttostr©;
stmp := cells[c,r];
strl.Add(formxml(_c,stmp));
end;
strl.Add(formxmlend(_r));
end;
end;
strl.Add(formxmlend(gridname));
if hdr then strl.Add(formxmlend('standalone'));
result := strl.Text;
freeandnil(strl);
end;
// XML-Format
function formxml(name,inhalt : string) : string;
begin
result := formxmlbegin(name)+inhalt+formxmlend(name);
end;
function formxmlbegin(inhalt : string) : string;
begin
result := '<'+inhalt+'>';
end;
function formxmlend(inhalt : string) : string;
begin
result := '</'+inhalt+'>';
end;
function getxml(xml_var : TsimploXML; kategorie, inhalt : string; stufe2 : string = ''; typ : integer =1) : string;
var ergebnis : string;
begin
// für den Fehlerfall
case typ of
1: ergebnis := ''; // string
2: ergebnis := '0'; // integer
3: ergebnis := '01.01.1900'; // Datum
4: ergebnis := '0'; // Boolean
5: ergebnis := '0,0'; // Float
end;
try
if stufe2 = '' then result := Xml_var.root.ElementsByName(kategorie)[0].ElementsByName(inhalt)[0].Text
else result := Xml_var.root.ElementsByName(kategorie)[0].ElementsByName(inhalt)[0].ElementsByName(stufe2)[0].Text;
except
result := ergebnis;
end;
end;
function nextgrid_importfromxml(grid : TNextGrid; xmlname, xmldata : string; hdr : boolean = false): boolean;
var xml : TSimploXML;
cclass : TNxColumnClass;
stmp : string;
c,i,r : integer;
spalten : integer;
zeilen : integer;
begin
result := false;
RegisterClasses([TNxTextColumn, TNxNumberColumn, TnxComboBoxColumn, TNxCheckBoxColumn, TNxDateColumn
, TNxCustomColumn, TNxTreeColumn, TNxButtonColumn, TNxHtmlColumn, TNxImageColumn
, TNxProgressColumn, TNxRateColumn, TNxPopupColumn, TNxStringsColumn, TNxIncrementColumn
, TNxListColumn, TNxCustomNumberColumn, TNxCalcColumn, TNxDateColumn, TNxGraphicColumn]);
stmp := grid.Name;
if hdr then xmldata := '<?xml version="1.0" encoding="ISO-8859-1"?>'+#10#13
+'<standalone>'+xmldata+#10#13+'</standalone>';
xml := TSimploXML.Create(NIL);
xml.LoadFromString(xmldata);
try
c := strtoint(getxml(xml,xmlname,'Spalten','',2));
spalten := c;
zeilen := strtoint(getxml(xml,xmlname,'Zeilen','',2));
with grid do begin
for i := 0 to c - 1 do begin
Columns.Add(TNxColumnClass(getclass(getxml(xml, xmlname, 'spaltentyp'+inttostr(i),'',2))));
Columns[i].Name := getxml(xml, xmlname, 'spaltenname'+inttostr(i),'',1);
Columns[i].Header.Caption := getxml(xml, xmlname, 'spaltenheader'+inttostr(i),'',1);
Columns[i].Visible := boolean(strtoint(getxml(xml, xmlname, 'spaltenvisible'+inttostr(i),'',2)));
Columns[i].sortkind := Tsortkind(strtoint(getxml(xml, xmlname, 'spaltensortierung'+inttostr(i),'',2)));
Columns[i].width := strtoint(getxml(xml, xmlname, 'spaltenbreite'+inttostr(i),'',2));
Columns[i].position := strtoint(getxml(xml, xmlname, 'spaltenposition'+inttostr(i),'',2));
Columns[i].footer.Caption := getxml(xml, xmlname, 'spaltenfooter'+inttostr(i),'',1);
end;
AddRow(zeilen);
xml.Root.Name := xmlname;
for r := 0 to zeilen - 1 do begin
for c := 0 to spalten - 1 do begin
Cells[c,r] := getxml(xml,xmlname ,'zeile'+inttostr®,'spalte'+inttostr©,1);
end;
end;
end;
finally
freeandnil(xml);
result := true;
end;
end;
end.
interface
uses NxGrid, simploxml;
function formxmlbegin(inhalt : string) : string;
function formxmlend(inhalt : string) : string;
function formxml(name,inhalt : string) : string;
function getxml(xml_var : TsimploXML; kategorie, inhalt : string; stufe2 : string = ''; typ : integer =1) : string;
function nextgrid_importfromxml(grid : TNextGrid; xmlname, xmldata : string; hdr : boolean = false): boolean;
function nxgrid_ExportToXml(const NextGrid: TNextGrid; gridname : string = ''; hdr : boolean = true) : string;
implementation
uses NxCustomGridControl, NxColumnClasses, NxColumns, Classes, Dialogs,
IniFiles, StrUtils, SysUtils, Variants, NxCustomGrid;
function nxgrid_ExportToXml(const NextGrid: TNextGrid; gridname : string = ''; hdr : boolean = true) : string;
var strl : TStringlist;
c, r : integer;
_c, _r : string;
stmp : string;
begin
strl := TStringList.Create;
if hdr then begin
strl.Add('<?xml version="1.0" encoding="ISO-8859-1"?>');
strl.Add(formxmlbegin('standalone'));
end;
if gridname = '' then gridname := nextgrid.Name;
strl.Add(formxmlbegin(gridname));
with nextgrid do begin
strl.Add(formxml('Zeilen',inttostr(rowcount)));
strl.Add(formxml('Spalten',inttostr(Columns.Count)));
for c := 0 to Columns.Count - 1 do begin
strl.Add(formxml('spaltentyp'+inttostr©,columns[c].ClassName));
strl.Add(formxml('spaltenheader'+inttostr©,columns[c].Header.Caption));
strl.Add(formxml('spaltenname'+inttostr©,columns[c].name));
strl.Add(formxml('spaltensortierung'+inttostr©,inttostr(ord(columns[c].SortKind))));
strl.Add(formxml('spaltenvisible'+inttostr©,inttostr(ord(columns[c].visible))));
strl.Add(formxml('spaltenbreite'+inttostr©,inttostr(columns[c].Width)));
strl.Add(formxml('spaltenposition'+inttostr©,inttostr(columns[c].Position)));
strl.Add(formxml('spaltenfooter'+inttostr©,columns[c].Footer.Caption));
end;
for r := 0 to rowcount - 1 do begin
_r := 'zeile'+inttostr®;
strl.Add(formxmlbegin(_r));
for c := 0 to Columns.Count - 1 do begin
_c := 'spalte'+inttostr©;
stmp := cells[c,r];
strl.Add(formxml(_c,stmp));
end;
strl.Add(formxmlend(_r));
end;
end;
strl.Add(formxmlend(gridname));
if hdr then strl.Add(formxmlend('standalone'));
result := strl.Text;
freeandnil(strl);
end;
// XML-Format
function formxml(name,inhalt : string) : string;
begin
result := formxmlbegin(name)+inhalt+formxmlend(name);
end;
function formxmlbegin(inhalt : string) : string;
begin
result := '<'+inhalt+'>';
end;
function formxmlend(inhalt : string) : string;
begin
result := '</'+inhalt+'>';
end;
function getxml(xml_var : TsimploXML; kategorie, inhalt : string; stufe2 : string = ''; typ : integer =1) : string;
var ergebnis : string;
begin
// für den Fehlerfall
case typ of
1: ergebnis := ''; // string
2: ergebnis := '0'; // integer
3: ergebnis := '01.01.1900'; // Datum
4: ergebnis := '0'; // Boolean
5: ergebnis := '0,0'; // Float
end;
try
if stufe2 = '' then result := Xml_var.root.ElementsByName(kategorie)[0].ElementsByName(inhalt)[0].Text
else result := Xml_var.root.ElementsByName(kategorie)[0].ElementsByName(inhalt)[0].ElementsByName(stufe2)[0].Text;
except
result := ergebnis;
end;
end;
function nextgrid_importfromxml(grid : TNextGrid; xmlname, xmldata : string; hdr : boolean = false): boolean;
var xml : TSimploXML;
cclass : TNxColumnClass;
stmp : string;
c,i,r : integer;
spalten : integer;
zeilen : integer;
begin
result := false;
RegisterClasses([TNxTextColumn, TNxNumberColumn, TnxComboBoxColumn, TNxCheckBoxColumn, TNxDateColumn
, TNxCustomColumn, TNxTreeColumn, TNxButtonColumn, TNxHtmlColumn, TNxImageColumn
, TNxProgressColumn, TNxRateColumn, TNxPopupColumn, TNxStringsColumn, TNxIncrementColumn
, TNxListColumn, TNxCustomNumberColumn, TNxCalcColumn, TNxDateColumn, TNxGraphicColumn]);
stmp := grid.Name;
if hdr then xmldata := '<?xml version="1.0" encoding="ISO-8859-1"?>'+#10#13
+'<standalone>'+xmldata+#10#13+'</standalone>';
xml := TSimploXML.Create(NIL);
xml.LoadFromString(xmldata);
try
c := strtoint(getxml(xml,xmlname,'Spalten','',2));
spalten := c;
zeilen := strtoint(getxml(xml,xmlname,'Zeilen','',2));
with grid do begin
for i := 0 to c - 1 do begin
Columns.Add(TNxColumnClass(getclass(getxml(xml, xmlname, 'spaltentyp'+inttostr(i),'',2))));
Columns[i].Name := getxml(xml, xmlname, 'spaltenname'+inttostr(i),'',1);
Columns[i].Header.Caption := getxml(xml, xmlname, 'spaltenheader'+inttostr(i),'',1);
Columns[i].Visible := boolean(strtoint(getxml(xml, xmlname, 'spaltenvisible'+inttostr(i),'',2)));
Columns[i].sortkind := Tsortkind(strtoint(getxml(xml, xmlname, 'spaltensortierung'+inttostr(i),'',2)));
Columns[i].width := strtoint(getxml(xml, xmlname, 'spaltenbreite'+inttostr(i),'',2));
Columns[i].position := strtoint(getxml(xml, xmlname, 'spaltenposition'+inttostr(i),'',2));
Columns[i].footer.Caption := getxml(xml, xmlname, 'spaltenfooter'+inttostr(i),'',1);
end;
AddRow(zeilen);
xml.Root.Name := xmlname;
for r := 0 to zeilen - 1 do begin
for c := 0 to spalten - 1 do begin
Cells[c,r] := getxml(xml,xmlname ,'zeile'+inttostr®,'spalte'+inttostr©,1);
end;
end;
end;
finally
freeandnil(xml);
result := true;
end;
end;
end.
Brgs
McInternet