Die Darstellung einer XML – Datei ist mit Hilfe der XmlDataSource und des GridView kein Problem. Zumindest solange man nicht die Ausgabe der einzelnen Felder formatieren möchte. Hierbei stieß ich auf ein Problem, welches ich nur mit einem kleinen Workaround lösen konnte.
Zunächst der Aufbau der XML-Datei:
<Data> <Item> <Number>0001</Number> <Name>Test 1</Name> <Price>20.25</Price> <Date>12/11/1999</Date> </Item> <Item> <Number>0002</Number> <Name>Test 2</Name> <Price>1.75</Price> <Date>12/11/1999</Date> </Item> </Data>
Mit Hilfe des XmlDataSourceControls werden die Daten an das GridView gebunden.
<asp:GridView ID="grid" runat="server" DataSourceID="XmlDataSource1" AutoGenerateColumns="False"> <Columns> <asp:BoundField DataField="Number" HeaderText="Number" SortExpression="Number" HtmlEncode="false"/> <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" HtmlEncode="false"/> <asp:BoundField DataField="Price" HeaderText="Price" SortExpression="Price" HtmlEncode="false" DataFormatString="{0:C2}" /> <asp:BoundField DataField="Date" HeaderText="Date" SortExpression="Date" HtmlEncode="false" DataFormatString="{0:dd.MM.yyyy}" /> Columns> </asp:GridView> <asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/App_Data/Data.xml" TransformFile="~/App_Data/Data.xsl" EnableCaching="False"></asp:XmlDataSource>
Wie man sehen kann wird bei den Feldern Price u. Dateein DataFormatString angewendet. Außerdem wird das Attribut HtmlEncode auf false gesetzt, um den bekannten Bug des GridView zu umgehen.
Allerdings zeigt der DataFormatString dennoch keine Wirkung, so daß die Ausgabe weiterhin unformatiert im Browser erscheint.
Ein möglicher Workaround für diese Gegebenheit wäre die Verwendung des TemplateField und das manuelle Casten und Formatieren der Daten.
<asp:TemplateField> <ItemTemplate> </ItemTemplate> </asp:TemplateField>
Die Ausgabe erscheint nun formatiert, allerdings ohne die Möglichkeit die Vorzüge der BoundFields zu nutzen.
Hallo foo,
das ist korrekt. Allerdings war die Sortierung auch nicht Thema dieses Artikels. Hierbei ging es lediglich um die korrekt formatierte Anzeige der Daten aus einer XML Quelle.
Gruß,
Kai
Hallo foo,
leider kann ich Dir nicht ganz folgen. Wo genau steht denn etwas von einer Sortierung?
Gruß,
Kai
Die Formatierung wird im Templatefield ist auh mit der Unterstützung von Bind möglich.
Beispiel mit einem Label.
<asp:TemplateField HeaderText=”Datum” SortExpression=”Datum”>
<ItemTemplate>
<asp:Label ID=”Label1″ runat=”server” Text=’<%# Bind(“Datum”, “{0:dd.mm.yyyy}”) %>’></asp:Label>
</ItemTemplate>
</asp:TemplateField>
…oder ganz einfach, indem man die Eigenschaft HtmlEncode der Spalte auf false setzt. hab allerdings keine Ahnung, wofür diese Eigenschaft gut ist oder was mit false nicht mehr funktioniert.
ah sorry, steht ja schon im Artikel. funktioniert bei mir hier, nehme an es wurde mit dem Service Pack gefixt…?