none
Rows in einer DGV RRS feed

  • Frage

  • Hallo Leute,
    ich möchte die Rows-Collection innerhalb einer DGV um eine weitere Sub ergänzen.
    Ich habe mir daher die Klasse MyDataGridView von DataGridView abgeleitet.
    Ebenso habe ich mir eine Klasse MyDataGridViewRowCollection, die wiederum von DataGridViewRowCollection abgeleitet ist, erstellt.
    In der Klasse MyDataGridViewRowCollection möchte ich eine Sub Irgendwas hinzufügen.

    Wenn jetzt aber Daten in das DGV.DataSource übertragen werden, dann habe ich in den neuen (MyDataGridViewRowCollection) Rows keine Daten drinnen.
    Wie schaffe ich es jetzt mir meine eigene RowCollection zu erstellen, die ich um eine Sub Irgendwas erweitern kann aber auch die Daten nach der Zuweisung der Daten per DGV.DataSoure = meineDatenquelle enthält?

    Vielen Dank im Voraus
    Christian Tauschek 

    Friend Class MyDataGridView
    
     Inherits System.Windows.Forms.DataGridView
    
    
    
     Public Shadows WithEvents Rows As MyDataGridViewRowCollection
    
     'Public Shadows WithEvents Rows As New MyDataGridViewRowCollection(me) 'funktioniert auch nicht
    
    
    
    End Class
    
    
    
    
    
    Public Class MyDataGridViewRowCollection
    
     Inherits DataGridViewRowCollection
    
    
    
     Public Sub New(ByVal dataGridView As DataGridView)
    
      MyBase.New(dataGridView)
    
     End Sub
    
    
    
     Public Sub Irgendwas()
    
      'eine zusätzliche Sub
    
     End Sub
    
    
    
    End Class
    
    
    Sonntag, 31. Oktober 2010 23:30

Antworten

  • Hallo Christian,

    das wird so nicht funktionieren. Mit Shadows führst Du eine neues Element ein,
    von dem das DataGridView jedoch nichts weiss und um das es sich nicht kümmert.
    Shadows ist nicht nur hier sondern in den wenigsten Fällen eine Lösung, siehe auch:
    Unterschiede zwischen Shadowing und Überschreiben (ff.)

    Das DataGridView stellt aber eine CreateRowsInstance Methode bereit,
    die aufgerufen wird, wenn die DataRowsCollection erzeugt wird.
    Diese könntest Du überschreiben und Deine Implementation zurückliefern.

    Wenn Du jedoch nur eine (oder einige) Methoden hinzufügen willst, gibt das nur bedingt Sinn.
    Denn Aufrufen wird das DataGridView die Methoden nicht.
    Und um Zugriff auf die Methode zu erhalten müsstest Du jeweils einen Cast durchführen.

    Sinnvoller könnte sein, das CollectionChanged Ereignis zu abbonnieren,
    wenn Du die Methode(n) jeweils bei Veränderungen an der Auflistung ausführen willst.

    Willst Du die Methode(n) zur Vereinfachung nutzen. wäre eine andere Möglichkeit
    eine Erweiterungsmethode zu verwenden.

    Gruß Elmar

     


    Dienstag, 2. November 2010 10:29
    Beantworter