Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Garzec

Alter Hase

  • »Garzec« ist der Autor dieses Themas

Beiträge: 693

Wohnort: Gießen

  • Private Nachricht senden

1

03.11.2015, 11:53

Erstellen mehrerer DataTables im Kalender

Hallo,
ich wollte als eigene Übung mal einen kleinen Kalender schreiben, der absolut simpel gestrickt bleiben soll. Man wählt das Datum aus und per Klick Event wird ein DataTable erstellt (wo dann die Termine aufgelistet werden).
Der Kalender ist fertig, Problem ist nur, wenn man das Datum ändert stürzt er bei mir ab, da ich das DataTable nur für den 1. Klick erstelle. Leider bin ich im Internet nicht fündig geworden wie ich ein DataTable an ein einzelnes Datum binde, also quasi für jeden Tag eine eigene Tabelle erstelle.

Erstmal zum Code:

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
/// ------------------------------------------------------------------------------------------------------------------------
        /// <summary>
        /// Erstellt Terminkalender
        /// </summary>
        private DataTable terminAnsicht = new DataTable();

        #endregion Interne Variablen

....

        #region Methoden

        /// ------------------------------------------------------------------------------------------------------------------------
        /// <summary>
        /// Terminansicht erstellen
        /// </summary>
        private void TerminAnsichtErstellen()
        {
            DataColumn columnUhrzeit = terminAnsicht.Columns.Add("Uhrzeit");
            columnUhrzeit.ReadOnly = true;
            DataColumn columnTermin = terminAnsicht.Columns.Add("Termin");
            columnTermin.ReadOnly = true;
            dataGridViewTerminAnsicht.DataSource = terminAnsicht;
            DataGridViewColumn columnWidth = dataGridViewTerminAnsicht.Columns[1];
            columnWidth.Width = 393;
        }

.......



/// ------------------------------------------------------------------------------------------------------------------------
        /// <summary>
        /// Datum Auswahl
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void monthCalendarDatumAuswahl_DateSelected(object sender, DateRangeEventArgs e)
        {
            TerminAnsichtErstellen();
}

...........




Wo das Problem liegt weiß ich, nur leider habe ich keine Ahnung wie ich von dieser "festen" Variable wegkomme und nicht nur 1 DataTable erstelle sondern für jeden Tag ein neues, damit das Programm nicht abstürzt und die eingetragenen Termine in XML eingetragen werden und wieder gelesen werden können.

EDIT: Ich hatte noch vergessen zu erwähnen, dass ich das ganze auf ein DataGrid gelegt habe. Leider steht im Internet nur was zu Datenbanken/SQL/ oder ein Tutorial zu nur einem DataSet also so wie ichs jetzt grade gemacht habe .. Deshalb meine Frage hier. Falls jemand doch etwas dazu im Internet finden sollte kann er mich gerne darauf hinweisen, dann werde ich mich dort einlesen :)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Garzec« (03.11.2015, 12:05) aus folgendem Grund: EDIT


Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

03.11.2015, 14:52

Es ist immer nützlich wenn du dazu schreibst womit du arbeitest. WPF? Wenn ja könnte dir das hier weiter helfen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Garzec

Alter Hase

  • »Garzec« ist der Autor dieses Themas

Beiträge: 693

Wohnort: Gießen

  • Private Nachricht senden

3

04.11.2015, 08:43

danke für deine Antwort,

leider benutze ich kein WPF, nur das reine Visual Studio mit den dort gebotenen "Forms" ?( Da ich als Anfänger eh keine Ahnung von weiteren Tools etc. habe halte ich mich erstmal ans Grundgerüst von Microsoft und versuche da auf nen grünen Zweig zu kommen :D

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

04.11.2015, 08:51

WPF ist auch "das reine Visual Studio" und genauso enthalten wie Forms. Allerdings ist WPF der deutlich flexiblere und besser getrennte Nachfolger von Forms, wenn man so will.

Leider habe ich nicht ganz verstanden, wieso Du meinst mehrere DataTables zu brauchen. Du willst ja nicht für jeden Eintrag eine eigene Tabelle haben, sondern Du willst eine Tabelle mit vielen Datums-Einträgen haben, aus der Du Dir die für den jeweiligen Tag relevanten Daten rausziehst (DataView RowFilter). Ich glaube, dass entweder ich Dich massiv missverstehe, oder Du noch mangelndes Verständnis zum Thema relationale Datenbanken und DataTables hast.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »BlueCobold« (04.11.2015, 09:02)


Garzec

Alter Hase

  • »Garzec« ist der Autor dieses Themas

Beiträge: 693

Wohnort: Gießen

  • Private Nachricht senden

5

04.11.2015, 09:32

Ich denke es liegt an meinem fehlenden Verständnis für die DataTables. So wie du es beschrieben hast macht es bei mir auch Sinn.

Ich habe EINE DataTable die alle Datumseinträge speichert. Je nachdem welches Datum jetzt geklickt wird lädt diese DataTable dann den ausgewählten Tag. Die DataTable habe ich in ein DataSet gepackt, um XML schreiben und lesen zu können. Dabei soll dann alles gespeichert und wieder geladen werden. So hab ichs erstmal gemacht ..

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
/// ------------------------------------------------------------------------------------------------------------------------
        /// <summary>
        /// Pfad der XML Datei
        /// </summary>
        private string filePathXML = string.Format("Kalendertabelle.xml", Application.StartupPath);


/// ------------------------------------------------------------------------------------------------------------------------
        /// <summary>
        /// Schreibt in XML Datei
        /// </summary>
        private void XMLWriter()
        {
            TerminKalenderTabelle.WriteXml(filePathXML);
        }

        /// ------------------------------------------------------------------------------------------------------------------------
        /// <summary>
        /// Liest aus XML Datei
        /// </summary>
        private void XMLReader()
        {
            TerminKalenderTabelle.ReadXml(filePathXML);
        }

        /// ------------------------------------------------------------------------------------------------------------------------
        /// <summary>
        /// Speichert XML Datei und überschreibt
        /// </summary>
        private void SaveFileXML()
        {
            XmlDocument doc = new XmlDocument();
            doc.Save(filePathXML);
        }

        /// ------------------------------------------------------------------------------------------------------------------------
        /// <summary>
        /// Lädt XML Datei und aktualisiert
        /// </summary>
        private void LoadFileXML()
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(filePathXML);
        }


Die eingetragenen Termine werden in die XML Datei eingetragen und sollen dann bei Datumsauswahl angezeigt werden. Soweit so gut .. jetzt sagt er noch beim speichern das das Xml Dokument ungültig ist, kein Stammelement besitzt. :dash:

Dabei verwende ich doch den XML Writer um die XML Datei zu erstellen, der Dateiname und der Pfad ist ja in filepathxml hinterlegt. Lesen, laden und speichern sollten doch dann funktionieren :S

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

04.11.2015, 09:39

Quellcode

1
2
3
4
5
6
<Kalendar>   <-- Stammelement
  <Eintrag />
  <Eintrag />
  <Eintrag />
  <Eintrag />
</Kalendar>
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Garzec

Alter Hase

  • »Garzec« ist der Autor dieses Themas

Beiträge: 693

Wohnort: Gießen

  • Private Nachricht senden

7

04.11.2015, 13:38

Danke für deine Hilfe. Wie funktioniert dein Codeblock? Weil die Einträge werden doch automatisch erstellt, also der Aufbau der XML Datei. Ich dachte zumindest da sollte man nicht selber rumpfuschen sondern das Programm selber machen lassen :rolleyes:

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

04.11.2015, 14:24

Nun...
1) Deine SaveFileXML-Methode füllt keine Daten ein. Folglich gibt's da keine Elemente. Du erstellst ein leeres XML-Dokument und speicherst das.
2) Du hast da zwei verschiedene Speicher-Methoden, die verschiedene Dinge tun und hast nicht mitgeteilt, welche denn genau das Problem darstellt.
3) Wollte ich mit der Darstellung einer validen XML-Datei Dir mitteilen, was ein Stammelement ist und Dich dazu bewegen, drüber nachzudenken, ob Du in 1) eventuell etwas falsch machst.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

H5::

Treue Seele

Beiträge: 368

Wohnort: Kiel

  • Private Nachricht senden

9

04.11.2015, 14:37

Bist du sicher, dass dein Beispiel gültig(valide) ist? Ich würde fast behaupten es ist nicht ein mal wohlgeformt.
:love: := Go;

Garzec

Alter Hase

  • »Garzec« ist der Autor dieses Themas

Beiträge: 693

Wohnort: Gießen

  • Private Nachricht senden

10

04.11.2015, 15:37

Ich habe die save und load Methode nochmal auskommentiert. Habe nachgelesen das die Write und Read Methode schon ausreichen und so nichts doppelt gemoppelt ist :)
Man kann die Uhrzeit bei mir per numericupdown einstellen, Termingrund in einer Textbox. Beide Eingaben werden in einer Variablen gespeichert. Daher sieht meine Write XML Methode jetzt so aus:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
private void XMLWriter()
        {
            string eingabeUhrzeit = numericUpDownUhrzeitStundeVon.Value.ToString() + ":"
                + numericUpDownUhrzeitMinuteVon.Value.ToString() + Environment.NewLine + "-"
                + numericUpDownUhrzeitStundeBis.Value.ToString() + ":" + numericUpDownUhrzeitMinuteBis.Value.ToString();

            string eingabeTermin = textBoxEingabeTermin.Text;

            terminAnsicht.Rows.Add(eingabeUhrzeit[0]);
            terminAnsicht.Rows.Add(eingabeTermin[1]);

            TerminKalenderTabelle.WriteXml(filePathXML);
        }


Über den Index wollte ich bestimmen das die Uhrzeit in Spalte 1 (0) und die Termine in Spalte 2 (1) eingetragen werden,

C#-Quelltext

1
terminAnsicht.Rows.Add(eingabeTermin[1]);


bekomme ich aber wieder um die Ohren gehauen weil der Index 1 außerhalb des Arraybereichs sei. Dabei wird er doch beim Erstellen der Tabelle erstellt
?(

Werbeanzeige