Laden...

WinForms - Was für ein Steuerelement für tabellarische Auflistung benutzen?

Erstellt von ExclusivAtom vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.633 Views
E
ExclusivAtom Themenstarter:in
48 Beiträge seit 2015
vor 8 Jahren
WinForms - Was für ein Steuerelement für tabellarische Auflistung benutzen?

Guten Tag,
ich programmiere mir derzeit eine Liste in C# von Filmen und Serien einfach als bessere Übersicht.
Ich habe eine normale Windows Form mit verschiedenen Reitern (Filme, Serien, Hilfe).
Im Reiter Filme wird eine Liste von Filmen im DataGridView angezeigt und bei Serien ein DataGridView mit Serien.
Wenn ich Doppelklick auf eine Serie mache, öffnet sich eine neue Form und ich habe für die Serie, Reiter für jede Staffel. Und ich will unter jedem Reiter bzw. Staffel die Folgen anzeigen, mit Episoden Nr, Name, Größe der Datei, und ob die Datei vorhanden ist.
Und hiermit wollte ich euch Fragen womit ich das am besten Anzeigen lassen kann. Also mit welchem Steuerelement.
Am Anfang dachte ich benutze ich ich einfach ein DataGridView, aber dann bräuchte ich im Endeffekt über 200 von den. Jede Staffel von einer Serie = ein DataGridView.
Und ich weiß nicht wie es dann an der Performance stört oder an der Größe der .exe Datei.

T
314 Beiträge seit 2013
vor 8 Jahren

Aber die Controls zeigst Du ja nicht zum gleichen Zeitpunkt an. Es ist also kein Problem dies so zu tun. Auch die Größe deiner .exe ist erstmal völlig egal.

2.298 Beiträge seit 2010
vor 8 Jahren

Ich würde das ganze sogar etwas anders angehen. Die 2 Hauptreiter Filme und Serien bleiben.

Auf dem Reiter Serien kommt jedoch nur das DataGridView mit den Serien. Die Staffel und die Folge würde ich in einer ComboBox-Spalte anzeigen / auswählen lassen. In der letzten Spalte dann noch ein Button Details, über den man sich Informationen zur Staffel / Folge ansehen kann.

Das ist jedoch nur der Ansatz den ich wählen würde.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

5.299 Beiträge seit 2008
vor 8 Jahren

ich denke, das Problem sind bei solchen Sachen nicht die Controls, sondern das Datenmodell.

Meist, wenn Leutz viel über Controls reden und nachdenken, dann deshalb, weil sie das Konzept Datenmodell überhaupt nicht kennen.

Andersrum - kennt man sich in Datenmodellierung aus (soo schwierig ist das garnet) - dann findet man auch recht leicht zu geeigneten Präsentationen der Daten.

Bzw. ist dann auch kein Thema, eine Präsentation zu ändern, oder geeigneteres zu schaffen.

Die Crux ist immer, dass das Datenmodell stimmig sein muss.

Habich 3 Codeproject-Artikel zu gemacht:
http://www.codeproject.com/Articles/1030969/Relational-Datamodel-for-Beginners

Der frühe Apfel fängt den Wurm.

E
ExclusivAtom Themenstarter:in
48 Beiträge seit 2015
vor 8 Jahren

Ich bedanke mich für die Antworten, die haben mir etwas geholfen und werde sie später richtig umsetzen. Aber ich hab es vorerst recht simple gemacht.
Und dazu hab ich auch wieder eine Frage.

private void frmSerienBeschreibung_Load(object sender, EventArgs e)
        {
            switch(this.SerienName)
            {
                case "Supernatural":
                    panSupernatural.Visible = true;
                    dgvSupernaturalEins.DataSource = SerienBeschreibung.Supernatural(1, dgvSupernaturalEins);
                    dgvSupernaturalEins = DGVEinstellungen(dgvSupernaturalEins);
                    dgvSupernaturalZwei.DataSource = SerienBeschreibung.Supernatural(2, dgvSupernaturalZwei);
                    dgvSupernaturalZwei = DGVEinstellungen(dgvSupernaturalZwei);
                    dgvSupernaturalDrei.DataSource = SerienBeschreibung.Supernatural(3, dgvSupernaturalDrei);
                    dgvSupernaturalDrei = DGVEinstellungen(dgvSupernaturalDrei); 
                    dgvSupernaturalVier.DataSource = SerienBeschreibung.Supernatural(4, dgvSupernaturalVier);
                    dgvSupernaturalVier = DGVEinstellungen(dgvSupernaturalVier); 
                case "Criminal Minds":
                    SerienBeschreibung.CriminalMinds(this.Staffel);
                    break;
                case "Teen Wolf":
                    SerienBeschreibung.TeenWolf(this.Staffel);
                    break;
            }

Mit dem Code daoben, übergebe ich den DGVs die einzelnen Folgen, die ich in der Klasse "SerienBeschreibung" habe.
Das steht in der Klasse drin:

public static DataTable Supernatural(int Staffel, DataGridView dgvUebertragen)
{
            List<Episode> lstEpisode = new List<Episode>();
            lstEpisode.Clear();
            DataTable dt = new DataTable();
            dt.Clear();
            dt = AddColumns(dt);
            switch(Staffel)
            {
                    case 9:
                    lstEpisode.Add(new Episode("1", "Ein Engel für Sam", "2,4", "Ja"));
                    lstEpisode.Add(new Episode("2", "Der Tod ist nur der Anfang", "2,4", "Ja"));
                    lstEpisode.Add(new Episode("3", "Ich bin kein Engel", "2,4", "Ja"));
                    for (int i = 0; i < lstEpisode.Count; i++ )
                    {
                        dt.Rows.Add(lstEpisode[i].Folge, lstEpisode[i].EpisodenName,                     lstEpisode[i].Groesse, lstEpisode[i].Vorhanden);
                    }
                    break;
            }
return dt;
}

So füge ich die einzelnen Episoden hinzu.
Meine Frage ist, wie ihr im ersten Code Schnipsel seht wiederholt sich der Code immer und immer wieder, und das halt sooft wie es Staffeln gibt.
Hättet ihr ne Idee wie ich es kürzer machen könnte?
Und im zweiten Code Schnipsel seht ihr wie ich die Episoden hinzufüge, viele Serien haben ja 20+ Serien und das wird lang, wenn ich über Hunderte Staffeln mache, ein Vorschlag wie ich es besser machen könnte?

5.299 Beiträge seit 2008
vor 8 Jahren

Meine Antwort hast du bereits - Stichwort "Datenmodellierung".

Ganz neu und von Anfang lernen, vermutlich auch noch grundlegendere Grundlagen.

Es kommt mir sehr eigenartig vor, dass du scheints 4 DGVs hast, die heissen wie die Staffeln einer Serie.
Wenn ich das weiter-denke, dann kannst du ja nur dann Serien hinzufügen, indem du in den Editor gehst, und weitere DGVs anbringst, etwa dgvMonk1, dgvMonk2, ...

Und dann neu kompilieren.

Ist das so konzipiert bei dir?

Der frühe Apfel fängt den Wurm.

2.298 Beiträge seit 2010
vor 8 Jahren

Ich würde mich hier ErfinderDesRades anschließen. Du machst dir viel zu viel Aufwand, was du über ein anständiges Datenmodell nicht hättest. Eventuell liegt es auch nicht am Datenmodell, sondern dass du es verkehrt visualisieren möchtest.

Warum nimmst du nicht den einfacheren Weg? Du hast deine Übersicht der Serien, wählst eine Serie aus und öffnest den Auswahldialog für die Staffeln / Folgen.

Auf diesem Dialog hast du dann nur ein DataGridView, welches dir Folgen einer Staffel anzeigt. Die Auswahl der Staffel wird anschließend über eine normale ComboBox oberhalb des DataGridView ausgeführt.

Auch würde ich die Serie nicht als "Property" fest verankern sondern eine List / BindingList verwenden.



//...

public class Show
{
      public List<Season> Seasons { get; set; }
}

public class Season
{
      public List<Episode> Episodes { get; set; }
}

An deinen Dialog musst du dann nur die eine Show weitergeben. Die Seasons bindest du an die ComboBox und nach Auswahl der Season werden die entsprechenden Episoden an das DataGridView gebunden.

Designtechnisch könnte das wie im Anhang zu sehen aussehen.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |