DataGridView Gemeinsames scrollen von rows

  • VB.NET
  • .NET 4.5

SSL ist deaktiviert! Aktivieren Sie SSL für diese Sitzung, um eine sichere Verbindung herzustellen.

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Michl.

    DataGridView Gemeinsames scrollen von rows

    Hallo zusammen,

    ich benötige mal wieder eure Hilfe:

    Ich habe auf einer Form 2 DataGridViews (dgv) nebeneinander. Beide dgv sind an die gleiche Datenquelle gebunden, zeigen aber Werte aus verschiedenen Spalten an.
    Das einzige, was bei beiden gleich ist, ist eine Nummerierung der Zeile welche jeweils in der ersten Spalte der dgv's angezeigt wird.

    Wenn ich jetzt mit der Tastatur in einer Spalte nach oben und unten navigiere, wird beim jeweils anderen dgv automatisch mitgescrollt :thumbup:

    Habt ihr eine Idee für mich wie ich das auch für das Scrollen mit der Maus realisieren könnte? Im aktuellen Fall scrollt logischerweise nur das dgv, welches gerade den Focus hat.
    Weiterhin gibt es ja auch das Problem, dass die aktuelle Row nicht mehr sichtbar ist.

    Vorab Danke für eure Ideen und Hilfe, Michl
    Du könntest über das MouseWheel-Ereignis die BindingSource-Position um einen entsprechende Wert verändern. Dadurch bleibt die selektierte Zeile quasi im Sichtbereich. Du musst nur ermitteln, welcher Zeilensprungwert beim Blättern mit dem Mausrad hinterlegt ist. Nur ist die Bedienung dann nicht mehr so, wie es ein Standardbenutzer erwartet.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von VaporiZed, mal wieder aus Grammatikgründen.

    ― häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    ― Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Das ist standardmässig nicht vorgesehen - also muss man händisch frickeln.

    Mein ObjectBrowser meint, den zu sehenden Zell-Ausschnitt des Dgvs könne man mit diesen beiden Props steuern:

    ObjectBrowser schrieb:

    Public Property FirstDisplayedScrollingColumnIndex As Integer
    Member of System.Windows.Forms.DataGridView
    Summary:
    Gets or sets the index of the column that is the first column displayed on the System.Windows.Forms.DataGridView.

    Public Property FirstDisplayedScrollingRowIndex As Integer
    Member of System.Windows.Forms.DataGridView
    Summary:
    Gets or sets the index of the row that is the first row displayed on the System.Windows.Forms.DataGridView.

    Ich hab in der Zwischenzeit auch schon etwas experimentiert.

    Wenn ich mit dem "MouseWheel-Ereignis" und "FirstDisplayedScrollingRowIndex" arbeite komm ich (leider nur fast) auf das gewünschte Ergebnis.
    Ich lasse mir während des scollens den index der ersten Row anzeigen. Dabei habe ich festgestellt, dass er mir immer den Ingex angibt, der direkt vor dem Scrollen zulest sichtbar war.

    Beispiel:
    Sehe ich aktuell als oberste Zeile = Index 5, dann gibt "FirstDisplayedScrollingRowIndex" nach dem srollen Index 5 aus und nicht den, den ich aktuell sehe.

    Ich verstehe grad noch nicht warum er mir den vorhergehenden Index und nicht den aktuellen Index ausgibt.

    Habt Ihr da ne Idee?
    Eigentlich musst du garnicht differenzieren ob klick oder Mausrad oO
    Bei mir funktioniert das Ganze wunderbar mit dem Event

    VB.NET-Quellcode

    1. Datagridview.Scroll
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D