Datagridview - letzte angezeigte Zeile ermitteln

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    Datagridview - letzte angezeigte Zeile ermitteln

    Hi,

    den Index der ERSTEN angezeigten Zeile einer DataGridView kann man leicht ermitteln, bzw setzen.

    VB.NET-Quellcode

    1. dgvFiles.FirstDisplayedScrollingRowIndex


    Wie kann ich aber den Index der LETZTEN angezeigten Zeile einer DataGridView ermitteln?

    Ich habe eine Funktion die alle Zeilen einer DataGridView timergesteuert verarbeitet. Der aktuelle Verarbeitungsstand ist an der jeweils ausgewählten Zeile sichtbar. Blöde ist halt, dass nach einiger Zeit die ausgewählte Zeile aus dem Bild "herausläuft". Da würde ich die Scroll Position gern nachjustieren. Und dazu muss ich eben wissen, bei welchem Index mein Window endet.

    LG
    Peter

    Peter329 schrieb:

    LETZTEN angezeigten Zeile
    Nimm die erste, die Höhe der einzelnen Zeilen und die Höhe des DGV selbst.
    Das ist ein wenig Arithmetik, allerdings können die einzelnen Zeilen unterschiedlich hoch sein, das musst Du bedenken.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    okie dokie ... dann ist das also wohl schon so, dass man den Index der letzten sichtbaren Zeile nicht so einfach auslesen kann. Da bin ich ja erst mal beruhigt. :)

    Gut, ich habe jetzt den Rat von RFG befolgt und die Sache über die dgv.Height und die Zeilenhöhe rechnerisch abgewickelt. Erfreulicherweise haben in meiner Anwendung alle Zeilen die gleich Höhe, da geht das problemlos. Damit ist mein Problem erst mal gelöst.

    Ansonsten werde ich dem Rat von VB1963 nachspüren. Vielleicht kann man das ja doch noch ein bissl eleganter und vor allem allgemeingültiger abwickeln.

    Wie immer herzlichen Dank für euren Rat!

    LG
    Peter
    @Peter329
    Meinst Du vielleicht sowas?

    VB.NET-Quellcode

    1. Dim visibleRowsCount = dgv.DisplayedRowCount(True)
    2. Dim firstDisplayedRowIndex = dgv.FirstDisplayedCell.RowIndex
    3. Dim lastvisbileRowIndex = (firstDisplayedRowIndex + visibleRowsCount) - 1
    Wow ... DisplayedRowCount() ... das ist tatsächlich genau das, was ich gesucht habe ! Damit kann ich mir die Rechnerei sparen!

    Supi ... meine Anwendung funktioniert jetzt nicht nur, sondern sieht auch schnuckeliger aus. :)

    Herzlichen Dank und LG
    Peter