XmlDataSource, GridView u. DataFormatString

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.

5 thoughts on “XmlDataSource, GridView u. DataFormatString

  1. 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

  2. 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>

  3. …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.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>