Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Kriz
Thema: Im SQLite automatisch Spalten erstellen lassen
Am im Forum: Datentechnologien

Alles klar, dann werde ich den Ansatz von Thomas.at verfolgen.
Vielen Dank für Eure Hilfe!!

Thema: Im SQLite automatisch Spalten erstellen lassen
Am im Forum: Datentechnologien

Die Idee hatte ich auch, aber wie sieht es da mit der Performance aus? Nehmen wir mal an, wir haben 100 Mitarbeiter die alle eine fünf Tage Woche haben und keinen Urlaub machen, dann haben wir 26.000 Einträge. Ist das eine normale Größenordnung, oder werden Abfragen da länger dauern? Mein Kenntnisstand bei Datenbanken ist eher rudimentär...

Thema: Im SQLite automatisch Spalten erstellen lassen
Am im Forum: Datentechnologien

Die Situation ist folgende:

Es wird ein Dienstplan für ein Restaurant geschrieben. Dieses Restaurant hat jeden Tag im Jahr geöffnet (jaja, die armen Gastronomen!), daher die 365 Spalten. Nun bekommt jeder Mitarbeiter eine eigene Zeile, mit den IDs für die Schichten je Tag. Die Schichten sind dann in einer separaten Tabelle wo auch die Pausen und sonstige weitere Informationen abgelegt sind.
Nun arbeitet natürlich niemand 365 Tage durch, somit wird die ein oder andere Spalte bei den Mitarbeitern leer sein.
Aktuell habe ich es so gelöst, dass ich die Dienstpläne wochenweise speicher.
Dafür habe ich folgende Tabellen:
1. Tabelle mit Informationen zum Dienstplan (Dienstplan ID, Startdatum, Notizen, usw)

2. Tabelle die einer Dienstplan ID die passenden Mitarbeiter mit den Verweisen zu den gearbeiteten Schichten verknüpft. Pro Dienstplan ID gibt es mehrere Zeilen, pro Mitarbeiter eine. Das angefügte Bild veranschaulicht es vllt etwas. (DiID = Dienstplan ID, MiID = Mitarbeiter ID, und unter den Tagen sind die jeweiligen IDs für die gearbeiteten Schichten)

3. Tabelle für die gearbeiteten Schichten inkl Pausenzeiten usw.

Das wirkt für mich langsam alles wie eine "Flickschusterei" und etwas umständlich, besonders wenn ich Auswertungen vornehmen möchte wann wer wie gearbeitet hat, wieviel Mitarbeiter durchschnittlich zu einem einem bestimmten Zeitpunkt da sind und so weiter.
Daher dachte ich mir, dass ich einfach eine Jahrestabelle erstelle...

Thema: Im SQLite automatisch Spalten erstellen lassen
Am im Forum: Datentechnologien

Was wäre denn der Vorteil der zweiten Variante?
In der aktuellen Situation kann ich mit meinem Reader direkt auf die passende Spalte zugreifen.
In deinem Vorschlag müsste ich ja dann die komplette Zeile einlesen, splitten, um dann auf den passenden Eintrag/Spalte zugreifen zu können.
Wäre das schneller bzw speichersparsamer?

Thema: Im SQLite automatisch Spalten erstellen lassen
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: SQLITE

Guten Morgen Freunde der Sonne,
Ich braucht eine Tabelle mir 365 Spalten. Durchnummeriert von 1 - 366. Gibt es bei sqlite von Haus aus eine Möglichkeit Spalten automatisch erzeugen zu lassen, oder muss ich das über eine for Schleife in C# machen?

Vielen Dank im voraus!
kriz

Thema: Gibt es eine Möglichkeit Linien in einem Foto zu erkennen?
Am im Forum: Grafik und Sound

Servus zusammen,

Folgendes Szenario:
Benutzer nimmt ein Foto von einem Dienstplan mit dem Handy auf. Auf diesem Foto möchte ich nun anhand der Linien erkennen wie schief das Bild gemacht ist, es richtig rotieren, zurecht schneiden und mittels OCR die Arbeitstermine auslesen.
Gibt es zum erkennen der Linien eine einfach Möglichkeit? Alles andere stellt kein Problem.da,mir gehts nur um das erkennen der Linien...

Danke euch!
Kris

Thema: ObservableCollection für mehrere Typen: Wie kann ich den Typ festlegen?
Am im Forum: Grundlagen von C#

Ich habe eine Klasse die Datenbankabfragen durchführt und bei Bedarf eine Liste bzw eine ObservableCollection verschiedenster Klassen zurück gibt. Also mal eine Liste mit emploees, mal mit contracts, mal mit schedules, usw... bis jetzt habe ich das mit object umgesetzt, also es wurde immer eine ObservableCollection<object> zurück gegeben. Nun komm eich aber an einen Punkt wo es einfacher wäre, wenn ich die ObservableCollection schon mit dem passenden Datentyp zurück bekommen würde.

Thema: ObservableCollection für mehrere Typen: Wie kann ich den Typ festlegen?
Am im Forum: Grundlagen von C#

Ist schon etwas länger her, aber ich versuch es hier trotzdem nochmal...

Wenn ich nun eine Methode mit einer generischen ObservabeleCollection als Rückgabe deklariere, dann bekomme ich als Fehlermeldung:

Fehler
Konvertierung von Emloyee in T nicht möglich. Wie muss ich es richtig angehen?

mein Code (Beispiel):


public static ObservableCollection<T> getList<T>()
        {
            ObservableCollection<T> result = new ObservableCollection<T>();

            Common.Employee employee = new Common.Employee(); //Hier die Datenbankabfrage
            result.Add(employee);

            return result;
        }

Thema: Welches WPF Event wird bei aktualisiertem Fenster geworfen?
Am im Forum: GUI: WPF und XAML

Servus zusammen,

ich habe eine WPF App in der eine Fenster teilweise per Code gefüllt wird. Da das aufbauen des Fensters etwas dauert möchte ich mit einem Loading Screen arbeiten. Beim ersten Laden des Fensters bekomme ich über ContentRendert bescheid wenn das Fenster "bereit" ist. Soweit kein Problem.
Der Nutzer hat die Möglochkeit per Combobox einen Monat auszuwählen woraufhin die Seite teils neu aufgebaut wird. Welches Event wird denn da gefeuert wenn er fertig ist, ContentRenderd ost es nicht...
Kann gerade leider keinen Code posten da ich unterwegs bin, aber vllt habe ich mich verständloch ausdrücken können und jemand hat schonmal einen Ratschlag.
Danke!
Kriz

Thema: ObservableCollection für mehrere Typen: Wie kann ich den Typ festlegen?
Am im Forum: Grundlagen von C#

@coffeebeans und Taipi88,

Anfangs hatte ich auch pro Klasse eine eigene Datenbankabfrage bis mir dann aufgefallen ist, dass sich viele Sachen wiederholt haben und mir eine Klasse für Abfragen sinnvoller vorkam. Aber tatsächlich wird es langsam unübersichtlich...

Was hat es mit diesem Dapper bzw Mapper auf sich?

Zitat
entschuldige - aber du benutzt doch schon Generics - wieso dann nicht richtig ?!

Es ist doch kein Problem eine generische Klasse zu schreiben, welche automatisch die richtige Abfrage je nach Objekttyp sendet (als Constraint könntest du hier sogar die Mitarbeiter-Klasse angeben) und das dann sogar typsicher zurück liefert...

Da tuh ich mich gerade etwas schwer dran... wie genau meinst du das? Also ich möchte jetzt keinen fertigen Code, sondern eher einen Verstehensanstoss... und wie und wo kommt dieser Mapper ins Spiel?

@witte
Wenn ich es richtig verstanden habe, dann bedeutet ORM schlicht dass pro Klasse eine Tabelle vorliegt wo für jede Property eine Spalte existiert. Und das ist schon so. Oder hab ich da was falsch verstanden?

Vielen Dank!
Kriz

Thema: ObservableCollection für mehrere Typen: Wie kann ich den Typ festlegen?
Am im Forum: Grundlagen von C#

Moin zusammen,

folgender Sachverhalt:
in meinem Projekt habe ich mehrere Klassen, beispielsweise Mitarbeiter, Schichten, oder Feiertage.
Nun habe ich eine Datenbank in der diese Mitarbeiter, Schichten und Feiertage abgelegt sind.
Zum Abrufen der Daten habe ich eine Methode geschrieben die eine ObservableCollection<object> zurück gibt, damit ich nicht für jede Klasse eine eigene Abfrage schreiben muss die dann den jeweiligen Typ wieder gibt. Ich hoffe ich konnte es verständlich erklären
Nun zu meiner Frage: Gibt es eine Möglichkeit diese ObservableCollection<object> in eine ObservableCollection<Mitarbeiter> zu konvertieren?


public static ObservableCollection<object> GetListOf(string ObjectName)
        {
                ObservableCollection<object> tmpList = new ObservableCollection<object>();
                SQLiteConnection connection = new SQLiteConnection() { ConnectionString = Const.DatabaseConnectionString() };

                SQLiteCommand command = new SQLiteCommand(connection);
                command.CommandText = "SELECT * FROM " + ObjectName + " WHERE IsDeleted LIKE 'FALSE' AND ID != '0' ORDER BY Name";
                connection.Open();

                SQLiteDataReader reader = command.ExecuteReader();

                switch (ObjectName)
                {
                    case "Employee":
                        List<Employee> newList = new List<Employee>();
                        while (reader.Read())
                        {
                            Employee tmpEmployee = new Employee()
                            {
                                //Hier werden dann die verschiedenen Eigenschaften befüllt
                            };
                            newList.Add(tmpEmployee);
                        }
                        newList.Sort();
                        tmpList = new ObservableCollection<object>(newList);
                        connection.Close();
                        connection.Dispose();
                        command.Dispose();
                        
                        return tmpList;

                      case "Holiday":
                        while (reader.Read())
                        {
                            Common.Holiday tmpHoliday = new Common.Holiday()
                            {
                                //Hier werden dann die verschiedenen Eigenschaften befüllt
                            };
                            tmpList.Add(tmpHoliday);
                        }
                        connection.Close();
                        command.Dispose();
                        connection.Dispose();
                        return tmpList;

                       //Und noch einige weitere case-Bedingungen...

        }

Wenn ich dann die Liste meiner Mitarbeiter brauche:


ObservableCollection<object> NeueListe = Datenbank.GetListOf("Employee");

Ich hoffe ich konnte rüberbringen was ich meine...

Danke im Vorraus!
Kriz

Thema: Problem mit Paketprojekt für Windows-Store
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

@Abt

Nachdem ich deinem Link gefolgt und mich noch etwas weiter gebildet habe, habe ich heraus gefunden, dass Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "myApp")den Ordner erstellt hat, allerdings nicht an der von mir erwarteten Stelle, sondern etwas weiter in den Tiefen des AppData-Verzeichnisses...
Wie es scheint wurde alles korrekt gespeichert und geladen.

Was allerdings immer noch nicht funktioniert ist das öffnen des PDF-Files... obwohl der gleiche Pfad zum speichern und öffnen benutzt wird, funktioniert nur das speichern. Wenn ich Process.Start(<pfad>) aufrufe, öffnet der IE nur für max eine Sekunde und schließt direkt wieder und im Debug-Fenster steht dass die Datei nicht gefunden wird...

Thema: Problem mit Paketprojekt für Windows-Store
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Moin zusammen,

folgender Sachverhalt: Ich entwickel eine WPF App, diese wollte ich im Windows-Store hochladen. Dafür muss ich die Desktop-Bridge benutzen.
Nun besteht mein Projekt aus meiner eigentlichen App und dem Paketprojekt.

Meine App speichert einige Sachen im Roamingfolder, also standartmäßig C:\User\<Username>\AppData\Roaming\myApp, den Dateipfad bekomme ich über

Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "myApp")

Wenn ich nun meine App aus Visual Studio starte und der Startpunkt das Paketprojekt ist, dann ergibt sich folgendes Problem:
Beim Start der App sollen zwei Dateien aus dem App-Stamm-Verzeichnis ins AppData\Roaming-Verzeichnis kopiert werden. Das scheint zu funktionieren, denn wenn ich es zwei mal hintereinander versuche, dann wird beim zweiten mal eine Exception geworfen dass das File schon vorhanden ist.
Nur kann ich den App-Ordner nicht im Roaming-Verzeichnis finden... Die App läuft bis zu diesem Zeitpunkt ohne Probleme, es wird auch auf die Daten korrekt zugegriffen die kopiert wurden, aber wie gesagt, ohne dass das Verzeichnis offenbar vorhanden ist. Wenn ich im Debugmodus einen Haltepunkt an der entsprechenden Stelle setze, dann wird auch das korrekte Verzeichnis beim kopieren angegeben.

Ein weiteres Problem ist, dass ich ein PDF erzeuge, dieses speicher (im Roaming-Verzeichnis) welches zu klappen scheint da keine Fehlermeldung kommt. Wenn ich nun versuche die PDF mit Process.Start() zu öffnen, wird kurz der IE angezeigt (mein Standartrogramm für PDF) und schliesst direkt wieder, im Debugfenster sehe ich dann dass die gesuchte Datei nicht gefunden wurde...

Letztes Koriosum... wenn ich das alles nicht im Roamingverzeichnis, sondern beispielsweise "C:\myApp", dann funktioniert alles ohne Probleme...

Hab ich irgendwo einen Denkfehler?

Vielen Dank!
Kriz

Thema: Zugriff auf User/AppData/Roaming/myApp via XAML
Am im Forum: GUI: WPF und XAML

Ja das wars auch. Hatte falsch gegoogelt.
Trotzdem danke!!

Thema: Zugriff auf User/AppData/Roaming/myApp via XAML
Am im Forum: GUI: WPF und XAML

Ich denke ich habe nötige Informationen vergessen...
Ich möchte log4net auaprobieren, dieses wird in der app.config konfiguriert. Es geht also nicht um ein View :)

Thema: Zugriff auf User/AppData/Roaming/myApp via XAML
Am im Forum: GUI: WPF und XAML

Servus,

Wie der Titel schon sagt, ich würde gern im XAML Code auf eine Datei im besagten Ordner zugreifen.
Wenn ich es mit "C:/user/usw..." versuche, dann wird das Verzeichnis "C:/user" erstellt.
In c# benutze ich ja Envoiroment.SpecialFolder, aber was mache ich bei XAML?

Vielen Dank!
Kriz

Thema: Best practice für das Verwalten von Einstellungen in einer Software
Am im Forum: Rund um die Programmierung

Servus zusammen!

Es gibt sicher zig verschiedene Herangehensweisen für das Verwalten von Einstellungen in einer Software. Speichern in der Registry, in einer INI Datei, in einer Datenbank, usw...
Gibt es denn etwas das Ihr besonders bevorzugt, oder absolut verabscheut?

Hintergrund ist, dass ich aktuell das Modell "Serialisieren/Deserialisieren" nutze und mich frage ob es da nicht etwas besseres/schnelleres/einfachrereres gibt...

Kriz

Thema: Dienstplangestaltung
Am im Forum: Projekte

@ MrSparkle

Screenshots sind angefügt, aber den DateiUpload konnte ich nicht nutzen, es wird ein Fehler angezeigt. Evtl weil die Datei zu groß ist?

Thema: Dienstplangestaltung
Am im Forum: Projekte

noch ein Screenshot

Thema: Dienstplangestaltung
Am im Forum: Projekte

weiterer Screenshot

Thema: Dienstplangestaltung
Am im Forum: Projekte

Hi pearsh.

Nein, die Anwendung ist nicht open source.

Kriz

Thema: Dienstplangestaltung
Am im Forum: Projekte

Servus zusammen!

Hier mal ein Projekt von mir an dem ich arbeite, Wer möchte und Zeit hat, schaut es sich mal an und kritisiert mich mal fleißig :)

Es ist ein Programm was zur Dienstplangestaltung in der Gastronomie dient.
Aktuell kann man den erstellten Plan nur ausdrucken, es soll aber auch noch möglich sein (im Rahmen von DSGVO) den Dienstplan im Internet abrufen zu können.

Funktionen sind:
- Erstellen und Bearbeiten von Mitarbeitern
- Mitarbeitergruppen, Verträge, Qualifikationen
- Dienstpläne erstellen, speichern, laden und ausdrucken
- erstellte Dienstpläne mit verschiedenen "Checks" kontrollieren (Ausreichend Mitarbeiter vorhanden, Mitarbeiter mit nötigen Qualifikationen vorhanden, usw...)

Download

Kriz

Thema: Wie sollte ich meine Datenbank am besten strukturieren? --> Normalisierung
Am im Forum: Datentechnologien

public static void SaveRota(Rota GivenRota)
        {
            Stopwatch neww = new Stopwatch();
            neww.Start();
            SQLiteConnection connection = new SQLiteConnection() { ConnectionString = Properties.Resources.DBConnectionString };
            SQLiteCommand command = new SQLiteCommand(connection);
            string DBConnectionString = Properties.Resources.DBConnectionString;
            connection.Open();
            command.CommandText = "SELECT Max(RotaEntryID) FROM RotaEntry";
            SQLiteDataReader reader = command.ExecuteReader();
            int EntryID = 0;
            int ScheduleEntryID = 0;
            string SQLCommand = "";
            while (reader.Read())
            {
                EntryID = int.Parse(reader[0].ToString()) +1;
            }
            reader.Close();
            command.CommandText = "SELECT MAX(DayEntryID) From DayEntry";
            reader = command.ExecuteReader();
            while (reader.Read())
            {
                ScheduleEntryID = int.Parse(reader[0].ToString()) +1;
            }
            reader.Close();

            foreach (var employee in GivenRota.ListOfEmployee)
            {
                Stopwatch WatchEmp = new Stopwatch();
                WatchEmp.Start();
                if (!employee.HasWeekOff())
                {
                    int[] DayEntryID = new int[7];
                    int DayCounter = 0;
                    foreach (var day in employee.plannedSchedulesThisWeek)
                    {
                        Stopwatch WatchDay = new Stopwatch();
                        WatchDay.Start();
                        if (day.ID == 0)
                        {
                            DayEntryID[DayCounter] = 0;
                        }
                        else
                        {
                            string BreakString = "";
                            if (day.ListOfBreaks.Count > 0)
                            {
                                foreach (var bre in day.ListOfBreaks)
                                {
                                    BreakString += bre.Start + "-" + bre.End + ";";
                                }
                                BreakString.Trim(';');

                            }
                            SQLCommand += String.Format("INSERT INTO DayEntry (plannedScheduleID, Start, End, Break) VALUES ('{0}','{1}','{2}','{3}');", day.ID, day.Start, day.End, BreakString);
                            DayEntryID[DayCounter] = ScheduleEntryID;
                            ScheduleEntryID++;
                        }
                        WatchDay.Stop();
                        Debug.WriteLine(WatchDay.Elapsed.ToString() + " für Schedule");
                        DayCounter++;
                    }

                    SQLCommand += String.Format("INSERT INTO RotaEntry (RotaEntryID, EmployeeID, ScheduleDay0, ScheduleDay1, ScheduleDay2, ScheduleDay3 ,ScheduleDay4, ScheduleDay5, ScheduleDay6) VALUES ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}', '{7}', '{8}');"
                                                                                , EntryID, employee.ID, DayEntryID[0], DayEntryID[1], DayEntryID[2], DayEntryID[3], DayEntryID[4], DayEntryID[5], DayEntryID[6]);
                    command.ExecuteNonQuery();
                }
                WatchEmp.Stop();
                Debug.WriteLine(WatchEmp.Elapsed.ToString() + " für Mitarbeiter " + employee.Showingname);
            }
            SQLCommand += String.Format("INSERT INTO Rota (StartDate, Name, Entry, Note, IsPublished) VALUES ('{0}','{1}','{2}','{3}','{4}')"
                                            , GivenRota.StartDate, GivenRota.Name, EntryID, GivenRota.Note, GivenRota.isPublished);
            
            command.CommandText = SQLCommand;
            command.ExecuteNonQuery();
            
            command.Dispose();
            connection.Close();
            connection.Dispose();
            neww.Stop();
            Debug.WriteLine(neww.Elapsed.ToString() + " für Function");

Das ist de Funktion...
Vorher hatte ich an den Stellen wo ich SQLCommand weitere INSERTs hinzufüge den INSERT direkt aufgerufen, also mit ExecuteNonQuery, das hat dann ungefähr 1min gedauert, nun habe ich einen "MonsterString" erstellt, jetzt dauert es noch ca 30 Sekunden.
Nun hab eich etwas weiter gegoogelt und "BeginTransaction" und "Commit" gefunden. Damit dauert es noch 1,2 Sekunden. Damit ist das Problem also gelöst.
Wenn Du allerdings an meiner Datenbankverarbeitung noch Verbesserungen siehst immer her damit!

Vielen Dank!
Kriz

Thema: Wie sollte ich meine Datenbank am besten strukturieren? --> Normalisierung
Am im Forum: Datentechnologien

So, ich habe mich mit dem Thema Normalisierung auseinandrr gesetzt und meine Datenbank dem enzsprechend umgestaltet. Ergibt auch alles Sinn und gefällt mir auch gut.
Nun habe ich allerdings das Problem, dass ein einfacher Speichervorgang, also das Eintragen in die Datenbank, statt 3 Sekunden (vorher), nun bis zu 45 Sekunden dauert.
Ergibt ja auch Sinn, wo es vorher nur ein INSERT war, sind es jetzt einige mehr, jede Schedule, jeder Break wird ja seperat eingetragen.

Meine Frage: Wie kann ich dad Speichern verkürzen? Gibt es auch da bestimmtr Grundlagen/Techniken die mir da weiter helfen könnten?

Thema: Wie sollte ich meine Datenbank am besten strukturieren? --> Normalisierung
Am im Forum: Datentechnologien

Schonmal vielen Dank dafür!!!
Das hat geholfen!

Wie wird es denn normalerweise mit dem Trennen von Datenbanken gehandhabt? Ich speicher in ein und der selben Datenbank sowohl Dienstpläne, als auch Mitarbeiterinformationen wie Adresse, Telefonnumer, usw.
Sollte sowas besser in eine andere Datenbank ausgelagert werden oder spricht nichts dagegen alles in einer zu "sammeln"

Thema: Wie sollte ich meine Datenbank am besten strukturieren? --> Normalisierung
Am im Forum: Datentechnologien

Ich tuh mich da etwas schwer...

Wenn ich die Spalte "Entry" auslager in eine separate Tabelle, dann hätte diese Tabelle folgende Spalten: EntryID, DayID, EmployeeID, ScheduleID, Start, End, Breaks. Dann würde ein Dienstplan mit beispielsweise 30 Mitarbeitern 210 Datensätze (jeder Mitarbeiter 7 Tage) erzeugen. Ist das noch praktikabel? Oder habe ich einen Denkfehler?

Thema: Wie sollte ich meine Datenbank am besten strukturieren? --> Normalisierung
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: SQLite

Hi zusammen, ich habe weniger eine technische, mehr eine "Logik-Frage"...

Ich sitze an einem Programm zur Dienstplangestaltung, gespeichert werden die Dienstpläne in einer SQLite Datenbank.

Aktuell gehe ich folgendermaßen vor:

Der Dienstplan ist die Klasse "Rota", diese Klasse "Rota" hat eine List<Employee>, jeder Eintrag in der List<Employee> hat wiederum eine List<Schedule>, jeder Eintrag dieser List<Schedule> besteht aus einer ScheduleID und einer List<Break>, die List<Break> bestehen aus Start und Ende, ich versuchs mal so zu erklären:

Rota:
- StartDate
- Name
- Note
- ID
- <List>Employee
- ID
- <List>Schedule
- ID
- <List> Break
- Start
- Ende

In meiner Datenbank habe ich eine Tabelle, in der ich die Dienstpläne speicher. Diese Tabelle hat die Spalten Name, ID, StartDate, Note, Entry. Wobei die Spalte Entry ein String ist, der sich durch die EmployeeID, DayID, ScheduleID, usw zusammensetzt. Der String sieht für einen Mitarbeiter beispielsweise folgendermaßen aus:

33:0#1$07:00:00-13:00:00;08:00:00/08:00:00

(Mitarbeiter ID 33, TagID 0, ShiftID 1, von 07:00 bis 13:00, eine Pause von 08:00 bis 08:30)

Für jeden weiteren Tag und jeden weiteren Mitarbeiter wird der String länger und länger, für einen komletten Dienstplan kommen da schonmal 10.000 Zeichen zusammen.
Zwar funktioniert es so, aber ich befürchte dass, je länger der String wird, je mehr Fehler können sich einschleichen.

Was für andere Lösungsansätze hättet Ihr für das Problem?

Vielen Dank!!!

Kriz

Thema: Object von Window zu Window weiter geben
Am im Forum: GUI: WPF und XAML

Zitat
warum 'object' ? Gibt es keinen Typen dazu?
Weil die ObservableCollection mit einer Datenbankabfrage gefüttert wird die viele verschiedene Typen abfragen kann/soll, da fand ich es am einfachsten mit "object" zu arbeiten.

Ich fad für die Problematik leider keinen anderen Lösungsansatz, da zwar das Objekt bearbeitet werden konnte und die Änderungen auch im Urpsrung, also UserControl, korrekt angezeigt wurden, sobald ich aber dem Objekt ein neues zuweisen wollte, wurde nichts übernommen. So funktioniert es nun.

Wenn es eine einfachere, bzw MVVM-passendere Lösung gibt, dann her damit :)

Thema: Object von Window zu Window weiter geben
Am im Forum: GUI: WPF und XAML

StackOverflow sei dank, Problem gelöst!

Falls jemand mal vor dem gleichen Problem steht: Die Lösung ist das ganze ViewModel als Parameter an das neue Window zu geben, nicht nur das eine Objekt, dann wird auch ein neu erstelltes Objekt übernommen.

Trotzdem Danke!

Thema: Object von Window zu Window weiter geben
Am im Forum: GUI: WPF und XAML

Hier mal noch ein paar Code-Snippets, vllt hilfts bei der Kärung...

User-Control-XAML:

<Label Content="{Binding Path=SelectedSchedule.Name}" Margin="0,-6,0,0" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="20" Height="32" Width="87"/>

User-Control-ViewModel

 private Schedule mSelectedSchedule;

    public Schedule SelectedSchedule
    {
        get { return mSelectedSchedule; }
        set
        {
            mSelectedSchedule = value;
            OnPropertyChanged("SelectedSchedule");
        }
    }

    public EmployeeWeekCheckButon_VM(Schedule GivenSchedule)
    {
        SelectedSchedule = GivenSchedule;
    }

    private void Edit()
    {
        Forms.Tracking.View.frmEditTracking newForm = new Forms.Tracking.View.frmEditTracking(SelectedSchedule);
        newForm.ShowDialog();
        OnPropertyChanged("SelectedSchedule");
    }

    private void Delete()
    {
        SelectedSchedule = null;
    }

Edit-Window-XAML:
<ComboBox ItemsSource="{Binding ListOfSchedule}" SelectedItem="{Binding SelectedSchedule}" x:Name="cmdSchedule" HorizontalAlignment="Left" FontSize="16" Margin="17,27,0,0" VerticalAlignment="Top" Width="120"/>

Edit-Window-ViewModel:

private Schedule _SelectedSchedule;

    public Schedule SelectedSchedule
    {
        get { return _SelectedSchedule; }
        set { _SelectedSchedule = value;
            OnPropertyChanged("SelectedSchedule"); }
    }

    private ObservableCollection<object> _ListOfSchedule;

    public ObservableCollection<object> ListOfSchedule
    {
        get { return _ListOfSchedule; }
        set { _ListOfSchedule = value;
            OnPropertyChanged("ListOfSchedule");
        }
    }

    public frmEditTracking_VM(Schedule GivenSchedule)
    {
        SelectedSchedule = GivenSchedule;
    }

    private void SaveAndClose()
    {
        SelectedSchedule.isTracked = true;
        OnClosingRequest();
    }