none
DataGridView - Vertikales Scrollen, Pixel für Pixel RRS feed

  • Frage

  • Guten Tag beisammen,

    ich entwickle momentan ein Tool welches Lieferscheine erstellt, die man sich ansehen und zusenden kann.

    Als Entwicklungsumgebung nutze ich Visual Studio Express 2012.

    Zum Anzeigen der erstellten Lieferscheine verwende ich eine DataGridView. Da einige Zeilen der DataGridView zu hoch sind sieht das vertikale Scrollen in der DataGridView weniger schön aus. Das liegt bekanntlich daran, dass die DataGridView immer "Zeile für Zeile" hüpft.

    Und genau das ist schon mein Problem. Gibt es eine vorgegebene Eigenschaft, die ich nutzen kann, damit ich ein "flüssiges, Pixel für Pixel Scrollen" habe, welches angenehm aussieht und damit die Leserlichkeit fördert?

    Ich suche mir jetzt seit zwei Tagen einen Wolf, doch anscheinend hat niemand ein Problem mit dem "Zeile für Zeile-Scrollen".

    Ich hoffe jemand hatte schon mal dieses Problem und weiß Rat. :-)

    Lieben Gruß, Lukas.


    • Bearbeitet Lukas_Rotermund Montag, 14. Oktober 2013 11:04 Ergänzung der IDE
    Montag, 14. Oktober 2013 11:01

Antworten

  • Hi Lukas.

    Probier mal ein Panel aus, in das du dein DGV hineinfügst. Dann das Panel auf Autoscroll = True setzen, und das DGV.Autosize = True.

    Danach dürftest du ein "frei" scrollbares" Panel haben, das über die gesamte Größe deines DGV scrollt.

    Erfüllt vermutlich den Zweck, performant dürfte das aber nur bedingt sein ... musst du einfach mal ausprobieren, denke ich.


    LG, Dennis.

    EDI Consultant/Developer

    Ich nutze meistens VB6 und VS2005 bis VS2012

    Bitte die Antworten sowie weitere hilfreiche Beiträge von Mitgliedern markieren. Vielen Dank.

    Montag, 14. Oktober 2013 11:36

Alle Antworten

  • Hi Lukas.

    Probier mal ein Panel aus, in das du dein DGV hineinfügst. Dann das Panel auf Autoscroll = True setzen, und das DGV.Autosize = True.

    Danach dürftest du ein "frei" scrollbares" Panel haben, das über die gesamte Größe deines DGV scrollt.

    Erfüllt vermutlich den Zweck, performant dürfte das aber nur bedingt sein ... musst du einfach mal ausprobieren, denke ich.


    LG, Dennis.

    EDI Consultant/Developer

    Ich nutze meistens VB6 und VS2005 bis VS2012

    Bitte die Antworten sowie weitere hilfreiche Beiträge von Mitgliedern markieren. Vielen Dank.

    Montag, 14. Oktober 2013 11:36
  • Noch ein kleiner Code zum ausprobieren ... woher allerdings der überzählige graue Bereich am Ende stammt, habe ich auf die Schnelle nicht finden können.

    Public Class Form1
        Dim RND As Random
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            RND = New Random(Now.Second)
            Dim DGV As DataGridView = New DataGridView
            With DGV
                For X = 0 To 99
                    .Columns.Add(New DataGridViewTextBoxColumn With {.HeaderText = "Spalte " & X.ToString})
                Next
                For Y = 0 To 99
                    .Rows.Add(New DataGridViewRow() With {.Height = RND.Next(12, 40)})
                Next
                For X = 0 To 99
                    For Y = 0 To 99
                        Dim Cell As DataGridViewTextBoxCell = DirectCast(.Item(X, Y), DataGridViewTextBoxCell)
                        Cell.Value = RandomString(10)
                    Next
                Next
                .Name = "DGV"
                .AllowUserToAddRows = False
                .AllowUserToDeleteRows = False
                .AllowUserToOrderColumns = True
                .AllowUserToResizeColumns = False
                .AllowUserToResizeRows = False
                .AutoSize = True
            End With
            Dim Panel1 As Panel = New Panel
            With Panel1
                .AutoScroll = True
                .Controls.Add(DGV)
                .Dock = DockStyle.Fill
            End With
            Me.Controls.Add(Panel1)
            DGV.Location = New Point(0, 0)
        End Sub
        Public Function RandomString(ByVal ML As Integer) As String
            Dim S As String = ""
            Dim L As Integer = RND.Next(Math.Max(ML \ 2, 1), Math.Max(ML, 2))
            For I As Integer = 0 To L - 1
                S = S & Chr(RND.Next(65, 90))
            Next
            Return S
        End Function
    End Class
    Ops. ... gerade gemerkt, bin ja hier im C#-Teil. Naja, vielleicht hilfts ja trotzdem.


    LG, Dennis.

    EDI Consultant/Developer

    Ich nutze meistens VB6 und VS2005 bis VS2012

    Bitte die Antworten sowie weitere hilfreiche Beiträge von Mitgliedern markieren. Vielen Dank.


    • Bearbeitet Dennis Becker Montag, 14. Oktober 2013 11:42 VB-Code im C#-Forum ;-)
    Montag, 14. Oktober 2013 11:40
  • Hallo Dennis!

    Genau das habe ich gesucht! :-), da soll mal einer drauf kommen.

    Das Scrollen ist perfekt, jetzt hat sich nur die DGV unerwartet in die Breite gezogen. Aber ich denke, dass lässt sich schnell beheben.

    Lieben Gruß, Lukas.

    Montag, 14. Oktober 2013 12:00