Wie binde ich ein GridView an eine XMLDataSource?

23/08/2007 - 12:14 von Christian Stelte | Report spam
Hallo!

Irgendwie laufe ich immer auf eine Fehler.

Meine Testdatenin einer 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>

Meine beiden Controls in einer neuen aspx-Seite:

<asp:XmlDataSource ID="XmlDataSource1" runat="server"
DataFile="~/App_Data/test.xml" EnableCaching="False"></asp:XmlDataSource>
<asp:GridView ID="GridView1" runat="server"
DataSourceID="XmlDataSource1"></asp:GridView>

Damit bekomme ich die Meldung:

Die Datenquelle für die GridView mit der ID GridView1 hatte keine
Eigenschaften oder Attribute, aus denen Spalten generiert werden können.
Stellen Sie sicher, dass die Datenquelle über Inhalt verfügt.

Sinngemàß kommt schon die gleiche Meldung wenn ich im Gridview-Steuerelement
die Datenquelle auswàhle.

Eine manuelle Datenbindung klappt auch nicht. Er findet die Datenfelder
nicht:

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

Was habe ich vergessen?

MfG
Chris
 

Lesen sie die antworten

#1 Thorsten
26/08/2007 - 13:30 | Warnen spam
Hallo Chris,

Du muß noch die Daten an das Grid binden. XML-Datenverbindung visuell
anbinden geht glaube ich nicht.
Aber per Code z.B.
'-- Codeseitendarstellung bei xml Daten beachten
' lcxml sind Daten, die Daten also aus der Datenquelle in einen String
schieben, hier symbolisch per Hand

lcxml="<Data>"
lcxml=lcxml+"<Item>"
lcxml=lcxml+"<Number>0001</Number>"
lcxml=lcxml+"<Name>Test 1</Name>"
lcxml=lcxml+"<Price>20.25</Price>"
lcxml=lcxml+"<Date>12/11/1999</Date>"
lcxml=lcxml+"</Item>"
lcxml=lcxml+"<Item>"
lcxml=lcxml+"<Number>0002</Number>"
lcxml=lcxml+"<Name>Test 2</Name>"
lcxml=lcxml+"<Price>1.75</Price>"
lcxml=lcxml+"<Date>12/11/1999</Date>"
lcxml=lcxml+"</Item>"
lcxml=lcxml+"</Data>"

Dim utf8 As Encoding = Encoding.UTF8
Dim lccodepage As Encoding = Encoding.Unicode
Dim unicodeBytes As Byte() = lccodepage.GetBytes(lcxml)
Dim lcxmlbytes As Byte() = Encoding.Convert(lccodepage, utf8,
unicodeBytes)

Dim lcxmlbytesstream As New MemoryStream(lcxmlbytes, True)
Dim stream As New StreamReader(lcxmlbytesstream)

LocalDataSource = New System.Data.DataSet()

LocalDataSource.ReadXml(stream)
grid.DataSource = LocalDataSource

MfG
Thorsten

Ähnliche fragen