[WPF] [C#] Datagrid und XML


#1
Hallo.

Ich habe vor ein Programm zu schreiben welches in Etwa folgendes realisieren soll.
Ich habe ein Window in dem unter anderem ein Bereich sein soll, 600x600px, in welchem tabellarisch je ein Foto zu einer Person angezeigt werden soll. Zu jeder Person befindet sich in einem XML-File ein Status (z.B. inaktiv/aktiv/neu angemeldet usw) der dann ebenfalls kenntlich gemacht werden soll (z.B. durch eine kleine zusätzlich eingeblendete Grafik).
Wenn diese Auflistung der Fotos größer werden soll als der dafür vorgesehene Rahmen, dann soll man das scrollen können, bzw dieses Scrollen dann eventuell automatisch ablaufen.
Da ich mich mit WPF noch nicht sonderlich gut auskenne dachte ich mir, dass man das mit einem DataGrid und einer damit verbundenen XML-Datei lösen könnte. Ist das ein guter Weg, oder wäre dort eventuell eine andere Strategie angebrachter? Wenn eine andere Strategie, was benötige ich dann dafür?

Ich habe bisher versucht mit dem Beispiel von MSDN zur XmlDataProvider-Klasse eine Xml-Datei zu binden und dann die Daten in einem DataGrid anzeigen zu lassen. Leider schaffe ich es nicht das Beispiel so umzubauen, dass das auch funktioniert. VS spuckt mir keine Fehlermeldung aus, sondern zeigt nur eine leeres DataGrid mit der richtigen Anzahl an Zeilen. In einer ListBox kann ich die Daten anzeigen lassen.

Das folgende Beispiel bei MSDN meine ich: http://msdn.microsoft.com/de-de/library/system.windows.data.xmldataprovider.aspx

Vielen Dank schon einmal für eure Hilfe, ich hoffe ich konnte mich verständlich genug ausdrücken.

Grüße
Jan
 
#2
Um das Ganze nun noch einmal ein wenig zu verdeutlichen habe ich mir, weil ich hier keine fotos hochladen wollte und so, das Beispiel auf einen Kinosaal umgemünzt. Also die verschiedenen Sitzreihen und die Nummern und der Status der angibt welcher Sitz reserviert/belegt/frei ist.

Dazu hier den Code aus meinem XAML File.
In der ListBox sollen eigentlich alle Sitze angezeigt werden, das ist nur zum Testen erstmal für mich interessant gewesen. Also in der ListBox werden nun einfach mal alle Sitze aufgeführt.
Code:
        <ListBox x:Name="PersonsListBox" Margin="0,0,392,0">
            <ListBox.ItemsSource>
                <Binding Source="{StaticResource SeatsData}"/>
            </ListBox.ItemsSource>
        </ListBox>
So, nun habe ich versucht das im DataGrid auch hinzubekommen, aber irgendwie scheitert es daran, dass ich entweder die Source nicht richtig angebe (das sagt auf jeden Fall VS) oder wenn eine Source zu stimmen scheint, dann sehe ich nur eine riesige Tabelle in der alles Mögliche drinnen steht aber nur nicht das was ich will. Es sieht so aus als würde ich für jeden Sitz einen Eintrag bekommen mit irgendwelchen Daten die ich nur schwer deuten kann. Wenn erwünscht gebe ich euch davon nocht nen Screenshot oder so, aber ich warte erstmal ab.
Code:
<DataGrid Margin="117,0,0,0" AutoGenerateColumns="False" HorizontalAlignment="Left" Name="dataGrid1" Width="386">
            <DataGrid.ItemsSource>
                <Binding Source="{StaticResource SeatsData}"></Binding>
            </DataGrid.ItemsSource>
            <DataGrid.Columns>
                <DataGridTextColumn Header="Row" Binding="{Binding XPath=@Row}"/>
                <DataGridTextColumn Header="Number" Binding="{Binding XPath=@Number}"/>
            </DataGrid.Columns>
</DataGrid>
Ich füge hier noch einmal einen Ausschnitt aus meinem XML File ein, vielleicht liegt es ja daran?
Code:
<?xml version="1.0" encoding="utf-8" ?>
<Seats xmlns="">
  <Rows>
    <RowID>1</RowID>
    <Seat>
      <Number>1</Number>
      <Row>A</Row>
    </Seat>
    <Seat>
      <Number>1</Number>
      <Row>B</Row>
    </Seat>
    <Seat>
      <Number>1</Number>
      <Row>C</Row>
    </Seat>
    <Seat>
      <Number>1</Number>
      <Row>D</Row>
    </Seat>
    <Seat>
      <Number>1</Number>
      <Row>E</Row>
    </Seat>
    <Seat>
      <Number>1</Number>
      <Row>F</Row>
    </Seat>
  </Rows>
</Seat>
Vielleicht hilft das ein bisschen mehr dabei mir zu helfen.

Viele Grüße
 
Zuletzt bearbeitet:
#3
Ist zwar ein wenig komisch Selbstgespräche zu führen, aber ich hoffe ja, dass sich noch jemand meldet. ;)

Also, im XmlDataProvider gebe ich ja den XPath an mit dessen Hilfe ich dann direkt auf die Elemente zugreifen kann. In meinem XML-File wäre das doch dann folgender Path: Seats/Rows/Seat und dann als XPath in den Columns wäre nurnoch Number und Row nötig. Wenn ich das so mache, dann bleibt allerdings meine Tabelle leer und anstatt dann zwei Spalten zu bekommen, die Number und Row heißen, habe ich zwei Zeilen, die komplett leer sind.

Habe ich das XMLFile falsch aufgebaut?

Ist eigentlich diese Sache überhaupt dynamisch für sich häufig ändernde Daten, also zum Beispiel Daten die sich alle paar Sekunden ändern würden?

EDITIch habe ein Bild angehängt auf dem zu erkennen ist, wie das momentan aussieht. Die Spalten habe ich nun angezeigt bekommen, die Daten werden allerdings nicht eingetragen.
 

Anhänge

Zuletzt bearbeitet:
#4
Aaaaaha!

Eine Lösung habe ich gefunden.
Ich musste die Dinge die ich per XPath auslesen will im XML File mit in den Tag von Seat mit reinschreiben.

Nun also zu meinem nächsten Problem, die Anzeige von Grafiken in einem DataGrid. Wie kann man das realisieren und eher noch, kann man das realisieren?
Vielleicht hat ja diesmal wer einen kleinen Tipp für mich? ;)
 

Neue Beiträge