Autor Beitrag
Waterman83
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Do 16.04.09 12:02 
HI C# fans,

ich bin noch ziemlich neu und habe mich schon durchgekämpft wie ich eine xml Datei abspeichern kann:
ausblenden 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:
        private void xmlspeichern()
        {
            xmlWriter = new XmlTextWriter("Veranstaltung.xml", Encoding.UTF8);
            xmlWriter.WriteStartDocument();
            xmlWriter.WriteStartElement("veranstaltung");
            xmlWriter.WriteStartElement("einstellungen");
            xmlWriter.WriteStartElement("name");
            xmlWriter.WriteRaw(frmVeranstaltungseinstellungen.xmlVeranstaltung.Name);
            xmlWriter.WriteEndElement();
            xmlWriter.WriteEndElement();
            if (t != null)
            {
                for (int i = 0; i < t.XmlTeilnehmerliste.Count - 1; i++)
                {
                    xmlWriter.WriteStartElement("teilnehmer");
                    xmlWriter.WriteStartElement("name");
                    xmlWriter.WriteRaw(((XmlTeilnehmer)t.XmlTeilnehmerliste[i]).Nachname);
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteStartElement("vorname");
                    xmlWriter.WriteRaw(((XmlTeilnehmer)t.XmlTeilnehmerliste[i]).Vorname);
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteEndElement();
                    xmlWriter.WriteEndElement();
                }
            }
            xmlWriter.WriteEndDocument();
            xmlWriter.Close();
        }


ebenfalls, habe ich mir den BEgriff savefiledialog angeschaut:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
            SaveFileDialog dlgFileSave = new SaveFileDialog();
            dlgFileSave.Title = "Speichern der Veranstaltung unter";
            dlgFileSave.Filter = "xmlDatei (*.xml)|*.xml";
            dlgFileSave.InitialDirectory =
                Environment.GetFolderPath(Environment.SpecialFolder.Personal);
            dlgFileSave.AddExtension = true;
            dlgFileSave.DefaultExt = "xml";
            dlgFileSave.OverwritePrompt = true;
            dlgFileSave.ShowDialog();


Meine Frage ist nun, wie kann ich beim klicken des Speicher Buttuns das Spiechern ausführen lassen. Auch habe ich gesehen, das man kontrollieren lassen kann ob die Datei schon existiert und es wird gefragt ob sie überschrieben werden soll.
Ich Danke schon einmal

GRuß

Daniel

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Do 16.04.09 13:05 
Hallo,

was hast du genau vor? So wie es aussieht willst du eine Teilnehmerliste als xml abspeichern. Du kannst das Ganze einfacher haben, indem du nur die Klassen definierst (Teilnehmer, Teilnehmerliste,...) und diese dann über einen XMLSerializer serialisiert (abspeicherst).

Zum Beispiel:
www.devhood.com/Tuto...aspx?tutorial_id=236
support.microsoft.com/kb/815813

und viele mehr :) Bei konkrenten Fragen oder falls du es wirklich manuel erstellen willst kannst du dich ja nochmal melden.

Gruß Daniel
Waterman83 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Do 16.04.09 13:15 
Hi,

leider kann ich nicht viel damit anfangen, da ich den code nicht wirklich verstehe, der sich hinter den links verbirgt, aber wie ich es gesehen habe geht es dabei nur um die erstellung einer xml dtaei, meine Frage ist nur, wie ich das durch den code vom savedialogfenster speichern kann.

Gruß und Dank

Daniel
bakachan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: Do 16.04.09 13:20 
1. Setze deinen Code bitte in entsprechende Code-Tags

2.
ausblenden C#-Quelltext
1:
2:
3:
4:
if (dlgFileSave.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
//Hier kann dann der Code zum Speichern rein
                }


3. zum überprüfen ob eine File schon existiert hat der SaveFileDialog eine CheckFileExists Propertie
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Do 16.04.09 13:36 
Zuerst definierst du eine Klasse mit deinen Daten.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
    public class Participant
    {
        public string GivenName { get; set; }
        public string SurName { get; set; }

        public Participant()
        {
            this.GivenName = string.Empty;
            this.SurName = string.Empty;
        }

        public Participant(string givenName, string surName)
        {
            this.GivenName = givenName;
            this.SurName = surName;
        }
    }


Den parameterlosen Konstruktur wird für die Serialisierung benötigt.

In deiner Hauptklasse hast du dann zum Beispiel eine Liste von Teilnehmer
ausblenden C#-Quelltext
1:
private List<Participant> Participants = new List<Participant>();					


die du dann mit Teilnehmer füllen kannst....
ausblenden C#-Quelltext
1:
2:
            this.Participants.Add(new Participant("Max""Mustermann"));
            this.Participants.Add(new Participant("Sarah""Musterfrau"));


Die saveFileDialog Komponente ist nur eine Komponente um einen Dateinamen von dem Benutzer zu beokmmen. Den Dateinamne kann man dann für das Speichern von Dateien verwenden.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
            if (this.saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                XmlSerializer serializer = new XmlSerializer(typeof(List<Participant>));
                using (FileStream stream = File.OpenWrite(this.saveFileDialog1.FileName))
                {
                    serializer.Serialize(stream, this.Participants);    
                }
            }


und dann hast du deine XML-Datei...

Gruß

Daniel
Waterman83 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Do 16.04.09 13:48 
Hi und danke erst einmal für die schnellen antworten. Leider ist das Problem noch nicht gelöst, habe folgendes gemacht:

if (dlgFileSave.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
Hier habe ich nun xmlspeichern(); eingeführt
}

es wird eine verknüpfung erstellt, aber die Datei mit einem anderen namen an einer anderen stelle abgespeichert. Ich bin vielleicht nur zu dumm, aber würde mich nocheinmal um einen Tipp freuen.

Wie geht das mit den Tags?

Gruß und Dank

Daniel
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Do 16.04.09 14:08 
Weil du deinen Dateinamen in die du das XML schreibst ja auch fest in den Code schreibst!

Erweitere deine xmlspeichern-Methode um den filename als Parameter

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
       private void xmlspeichern(string dateiName)
       {
            xmlWriter = new XmlTextWriter(dateiName, Encoding.UTF8);
            ....
       }


Der Aufruf ist dann

ausblenden C#-Quelltext
1:
2:
3:
4:
       if (dlgFileSave.ShowDialog() == System.Windows.Forms.DialogResult.OK)
       {
              xmlspeichern(dlgFileSave.FileName);
       }


Die Code-Formatierung im Forum machst du mit [tag] Code [/tag]. Bei C-Sharp-Code ist der tag cs.
bakachan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: Do 16.04.09 14:11 
Die Code-Tags findest du wenn du beim Schreiben deines Beitrags oben auf "Bereiche" klickst.

du musst deiner xmlspeichern-Funktion ja auch noch übergeben wohin es speichern soll
Im moment macht die Funktion ja immer das gleiche:
ausblenden C#-Quelltext
1:
2:
3:
4:
private void xmlspeichern()
        {
            xmlWriter = new XmlTextWriter("Veranstaltung.xml", Encoding.UTF8);
//Du speicherst IMMER als Veranstaltung.xml
)

Also:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
if (dlgFileSave.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
// xmlspeichern(dlgFileSave.FileName);
// du musst natürlich deine xmlspeichern-Funktion anpassen.
}