Datagridview-Klasse mit eigenen properties etc. erweitern

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Datagridview-Klasse mit eigenen properties etc. erweitern

    Hallo!

    Ich programmiere gerade ein Datagridview und möchte die Klasse etwas für meine Bedürfnisse anpassen. Eine Erweiterungsmethode konnte ich schon problemlos anhängen.

    VB.NET-Quellcode

    1. Module DGV_Extensions
    2. <Extension()> _
    3. Public Sub grundgerüst(ByVal _DGV As DataGridView)
    4. With _DGV
    5. .Rows.Clear()
    6. .Columns.Clear()
    7. ' Spalten hinzufügen
    8. .Columns.Add("Stunde", "Stunde")
    9. .Columns("Stunde").SortMode = DataGridViewColumnSortMode.NotSortable
    10. .Columns.Add("Montag", "Montag")
    11. .Columns("Montag").SortMode = DataGridViewColumnSortMode.NotSortable
    12. .Columns.Add("Dienstag", "Dienstag")
    13. .Columns("Dienstag").SortMode = DataGridViewColumnSortMode.NotSortable
    14. .Columns.Add("Mittwoch", "Mittwoch")
    15. .Columns("Mittwoch").SortMode = DataGridViewColumnSortMode.NotSortable
    16. .Columns.Add("Donnerstag", "Donnerstag")
    17. .Columns("Donnerstag").SortMode = DataGridViewColumnSortMode.NotSortable
    18. .Columns.Add("Freitag", "Freitag")
    19. .Columns("Freitag").SortMode = DataGridViewColumnSortMode.NotSortable
    20. ' Breite einstellen
    21. .Columns(0).Width = 45
    22. For i = 1 To .Columns.Count - 1
    23. .Columns(i).Width = 95
    24. Next
    25. End With
    26. End Sub
    27. End Module


    Nun möchte ich es auch noch um Variablen erweitern und finde dazu irgendwie keine Möglichkeit.
    Hier wie ich es geplant hab:

    VB.NET-Quellcode

    1. Private akt_raum As Raum = New Raum
    2. Public Property raum As Raum
    3. Get
    4. Return akt_raum
    5. End Get
    6. Set(ByVal _raum As Raum)
    7. akt_raum = _raum
    8. End Set
    9. End Property


    Habe auch schon versucht, überall das "<Extension()>" vorzustellen, leider kein Erfolg!
    Stehe ich irgendwie auf dem Schlauch, oder geht es prinzipiell nicht die DGV_Klasse in dieser Hinsicht zu erweitern? ?(

    Vielen Dank im Vorraus, wenn mir jemand helfen könnte!

    Gruß,

    Smendrik

    VB1963 schrieb:

    Du möchtest, glaub ich, dein DGV an Daten Binden...
    Dazu musst du dir das Kapitel typ. Dataset mit seinen Möglichkeiten einmal durchgehen...
    Schaue dir die Tutorials von @ErfinderDesRades einmal genauer an.
    Hallo VB1963,

    Danke erst einmal für die schnelle Antwort!
    Ich habe drei DGVs, welche Stundenpläne für Lehrer, Raum und Klasse anzeigen. Diesen DGVs möchte ich ne Eigenschaft dranhängen, in der der aktuelle Raum, Lehrer bzw die Klasse gespeichert ist, der/ die gerade angezeigt wird.

    Klar geht dies durch ne Public-Var (Holzweg)

    VB.NET-Quellcode

    1. Public akt_lehrer as lehrer = '....der gerade angezeigte Lehrer
    2. '....


    Jedoch finde ich, dass es doch schöner wäre, wenn ich die Infos als Eigenschaft des DGVs speichern könnte. Die Zugriffsmöglichkeit wäre dann etwa so:

    VB.NET-Quellcode

    1. DGV_Lehrer.Lehrer = '.... der bestimmte Lehrer


    Die DGV-Klasse müsste nur allgemein um die Properties Raum, Lehrer, Klasse erweitert werden und nur ein Property wäre dann je nach DGV besetzt.


    ....Ich programmiere erst seit kurzem OOP und habe noch lange nicht alles kapiert, denke aber, dass so eine DGV-Erweiterung doch möglich sein müsste, oder?
    Wenn man ne neue Klasse definiert, dann kann man ja auch soviele Properties definieren, wie man will, warum soll das hier nicht gehen?

    Bin etwas ratlos und muss das sonst halt per Holzweg machen...

    Viele Grüße,
    Smendrik
    ja, das geht doch auch.
    Hat jemand gesagt, du könnest nicht DatagridView beerben und weitere Properties dranmachen?

    Es ist halt sehr unüblich, aber ein Stundenplan passt eh nicht so recht in die Databinding-Szenarien, für die DGV eigentlich designed ist.

    Edit:
    Naja, im Grunde aber auch nicht zu empfehlen.
    Abonnier besser das SelectionChanged-Event des DGVs, lies den Lehrer aus der aktuellen Zelle aus, und tu ihn mw. in eine Property deines Forms, wo das DGV drauf ist.
    Controls beerben, und mit dermassen spezialisierten Zusatz-Properties auszustatten soll man vermeiden.

    Sonst hast du am Ende 3000 verschiedene DGV-Klassen, eine für Lehrer, eine für Räume, eine für Stunden, eine für Eltern, eine für Fehlzeiten,...

    Alle diese DGVs tun dasselbe, nämlich das SelectionChanged-Event verarbeiten, und die CurrentCell auslesen.

    kein gutes Konzept.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    hmmm..... stimmt, da war was mit beerben, aber das erfordert etwas Literaturstudium meinerseits. (wie gesagt: OOP ist noch nicht mein Spezialgebiet :S )

    Naja, es würde das DGV zwar in meinem Falle nicht sehr aufblasen, aber es stimmt schon, es ist unüblich.
    Derzeit liegt der Lehrer (und Klasse und Raum) in einer Public meiner Form und wird immer brav aktualisiert, wenn sich was ändert.

    Controls beerben, und mit dermassen spezialisierten Zusatz-Properties auszustatten soll man vermeiden.

    Das macht schon Sinn, dass man das nur im äußersten Notfall macht, haste Recht!
    ...Aber da wären die Infos halt so schön aufgehoben...
    aktueller Lehrer gesucht ---> fragen wir doch direkt das DGV (DGV_Lehrer.Lehrer) ---> DGV sagt: Lehrer Müller mit Name Müller, Kürzel Mue, Fächer : Bio und Chemie etc....

    Wenn ich mal wieder viel Zeit habe, dann schreib ich das vllt. um und erstelle ein "SpezialDGV" (nach Literaturstudium...)

    Bis dahin vielen herzlichen Dank für Deine Mühen und Gedanken!

    Smendrik

    Smendrik schrieb:

    aktueller Lehrer gesucht ---> fragen wir doch direkt das DGV (DGV_Lehrer.Lehrer) ---> DGV sagt: Lehrer Müller mit Name Müller, Kürzel Mue, Fächer : Bio und Chemie etc....
    ah - so ein Grid ist ja kein Stundenplan!
    Das ist ja eine Auflistung von Datensätzen, und dafür wiederum ist DGV hervorragend geeignet, wenn du Databinding an ein typisiertes Dataset verwendest.
    Das ist für deine Datenverarbeitung eh dringend empfohlen, gugge Datenbänkerei-Einstieg und weiterführende Links.
    (immer, wenn ich damit ankomme, fangen die Leuts an, von Datenbanken zu reden - also beachte: Es geht dabei keineswegs um Datenbanken!

    Das ist nu auch wieder Gegenstand umfangreicher Studien, aber diese bleiben dir so oder so nicht erspart, denn eine Schulverwaltung kriegt man nicht mehr ohne relationale Datenmodellierung gebacken.
    Und nachdem du das geschnackelt hast, ist auch das Thema "selbsterfundenes LehrerDGV" vom Tisch, denn ein an eine LehrerDataTable gebundenes Normalo-DGV leistet genau dieses, und zwar besser.