Autor Beitrag
Dreshar
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Fr 30.07.10 13:42 
Hallo liebe Community,

Ich versuche mich seit gestern an einem Spielchen dass ich, wie es scheint nicht gewinnen soll :D.
Es geht um folgendes. Ich hab einen dateTimePicker, eingestellt auf ShortDate (z.b 30.07.2010) dieser gehört zu einem TimeController. Mit 2 verschiedenen Buttons Vor und Zurück scrollt man das Datum +1 oder -1 Value. Zusätzlich hab ich eine Funktion die Kundendaten in eine XML per Formular schreibt, zur veranschaulichung ein Schnipsel Code:
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
                        XmlDocument doc = new XmlDocument();

                        // Laden der XML Datei
                        doc.Load("C:\\TimeController\\CustomerInformation.xml");

                        XmlElement root = doc.DocumentElement;
                        XmlNode custName = null;
                        XmlNode custNr = null;
                        XmlNode custSupport = null;
                        XmlNode custHours = null;
                        XmlNode writeDate = null;
                        XmlNode docID = null;


                        KundenName = Regex.Replace(KundenName, "(\\s+)""");
                        custName = doc.CreateElement(KundenName);
                        docID = doc.CreateElement("ID");
                        writeDate = doc.CreateElement("Datum");
                        custNr = doc.CreateElement("KundenNr");
                        custSupport = doc.CreateElement("Vertrag");
                        custHours = doc.CreateElement("Stunden");
                        docID.InnerText = "ID";
                        custName.AppendChild(docID);
                        custName.AppendChild(writeDate);
                        writeDate.InnerText = getDate;
                        custNr.InnerText = KundenNr;
                        custName.AppendChild(custNr);
                        custName.AppendChild(custSupport);
                        custName.AppendChild(custHours);
                        root.AppendChild(custName);

                        if (support == true)
                        {
                            custSupport.InnerText = support.ToString();
                            custHours.InnerText = stundenMonat;
                            doc.Save("path");
                            this.Close();
                        }
                        else {
                            custSupport.InnerText = "Nein";
                            custHours.InnerText = "0";
                            doc.Save(path);
                            this.Close();
                        
                    }


Ergebnis ist folgendes mit Beispieldaten :

ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
  <?xml version="1.0" encoding="utf-8" standalone="no" ?> 
<!-- Hellmedia GmbH - Time Controller Entry Start
  -->
 
- <Kundeninformationen>
- <Hotel Fischer>
  <ID>ToDo</ID
  <Datum>30.07.2010</Datum
  <KundenNr>1</KundenNr
  <Vertrag>True</Vertrag
  <Stunden>1</Stunden
  </Hotel Fischer>
  </Kundeninformationen>


Folgendes ist zu tun:

Ich will wenn ich das Datum des Eintrags mit selectSingleNode aufgerufen habe und es mit dem Datum des dateTimePickers verglichen habe, dass es dynamisch die Namen der Kunden in z.b einer Textbox darstellt mann man im Datum scrollt, beispielsweise:

30.07.2010
Zurück Vor

Hotel Fischer

31.07.2010
Zurück Vor

Anderer Kunde

Sorry für die schlechte veranschaulichung, ich hoffe ihr könnt euch vorstellen was ich meine.

Wie bekomm ich das jetzt hin das nachdem das Datum verglicen ist er den spezifischen Kundennamen abliest von genau dem Datensatz in dem auch das Datum steht? Gibt es so wie z.b in PHP eine funktion das ich sage Path=././" sozusagen 1 step back? Mit einer ID hab ich mir auch schon überlegt es zu lösen nur steh ich grad auf dem schlauch wie ich dann die richtig auslesen soll etc......

Vielleicht könnt ihr mir ja weiterhelfen.

Vielen Dank schonmal
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 30.07.10 18:29 
Nimm einfach eine Schleife über alle "Hotel Fischer"-Tags (Leerzeichen in Tag-Namen? ist das valide :gruebel: ?). Dort vergleichst du dann das Datum und gibst ggf. die restlichen Unterknoten aus.

_________________
>λ=
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Sa 31.07.10 10:17 
Hallo,

Nein, Leerzeichen sind im Tag-Namen nicht gültig.

Da ich in eile bin, hab mir nicht alles durchgelesen. Dennoch möchte ich ein paar Stichworte fallen lassen. Für Xml gibt es die sprachenunabhängige Technologin XPath. Mit Hilfe deren du in einem Xml-Dokument navigieren und suchen kannst.

Ich denke das ist für deinen Fall ziemlich brauchbar.

Da kannst du eben genau Abfragen machen, zum Beispiel:

Hotels mit Datum 30.07.2010:
ausblenden C#-Quelltext
1:
var hotels = kundenInformationen.XPathSelectNodes("Hotel[Datum[text()=='30.07.2010']");					


Die Syntax und Abfrage ist nicht richtig. Aber so ähnlich sieht es dann aus. Sehr komfortable und vor Allem auch in anderen Sprachen verwendbar. Darüberhinaus machst du 0 Zeilen Code und kannst es in der App.Config hinterlegen, falls sich mal was ändert.

Gruß