IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[VB.NET] Datagrid scrollbar


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2004
    Messages
    297
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 297
    Par défaut [VB.NET] Datagrid scrollbar
    Bonjour,

    J'ai créé un petit datagrid, je gère l'auto dimensionnement de mes lignes grâce à cette classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    Imports System
    Imports System.Reflection
     
    Public Class DataGridRowHeightSetter
        Private dg As DataGrid
        Private rowObjects As ArrayList
     
     
        Public Sub New(ByVal dg As DataGrid)
            Me.dg = dg
     
            InitHeights()
        End Sub
     
     
     Private Sub InitHeights()
            Dim mi As MethodInfo = dg.GetType().GetMethod("get_DataGridRows", BindingFlags.FlattenHierarchy Or BindingFlags.IgnoreCase Or BindingFlags.Instance Or BindingFlags.NonPublic Or BindingFlags.Public Or BindingFlags.Static)
     
            Dim dgra As System.Array = CType(mi.Invoke(Me.dg, Nothing), System.Array)
     
            rowObjects = New ArrayList
            Dim dgrr As Object
            For Each dgrr In dgra
                If dgrr.ToString().EndsWith("DataGridRelationshipRow") = True Then
                    rowObjects.Add(dgrr)
                End If
            Next dgrr
     
        End Sub
     
        Default Public Property Item(ByVal row As Integer) As Integer
            Get
                Try
                    Dim pi As PropertyInfo = rowObjects(row).GetType().GetProperty("Height")
                    Return Fix(pi.GetValue(rowObjects(row), Nothing))
                Catch
                    Throw New ArgumentException("invalid row index")
                End Try
            End Get
            Set(ByVal Value As Integer)
                Try
                    Dim pi As PropertyInfo = rowObjects(row).GetType().GetProperty("Height")
                    pi.SetValue(rowObjects(row), Value, Nothing)
                Catch
                    Throw New ArgumentException("invalid row index")
                End Try
            End Set
        End Property
    End Class

    Cela marche bien excepté l'absence de scrollbar Vertical lorsque je depasse la taille de mon datagrid


  2. #2
    Membre éclairé
    Inscrit en
    Mai 2004
    Messages
    297
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 297
    Par défaut
    J'ai modifié mon code et intégré celui da la FAQ concernant ce problème.
    Cela marche bien je vois mon scrollbar cependant en cliquant dessus je ne vois qu'une partie des records.

    Par contre si j'utilise la roulette de ma souris pour faire défiler mes enregistrements dans le datagrid cela fonctionne je les vois tous ...

    Personne n'a rencontré ce genre de problème ?
    (Visual Studio 2003 framework 1.1)

    Merci

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2004
    Messages
    297
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 297
    Par défaut
    J'ai essayer de faire un datagrid.CurrentRowIndex = id du dernier record.

    Cela marche bien mon scrollbar est bien dessus mais dès que je remonte au premier enregistrement puis j'essaye de descendre au plus bas cela ne marche plus il ne m'affiche pas les derniers records ...



    Sinon lorsque je double clique sur la gauche entre deux lignes pour les retaillées la le scrollbar fonctionne bien après.


    merci

  4. #4
    Membre éclairé
    Inscrit en
    Mai 2004
    Messages
    297
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 297
    Par défaut
    Le fait de rajouter un Me.Finalize me fait marcher l'ascenceur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    Option Explicit On 
    Option Strict On
     
    Imports System
    Imports System.Reflection
    Imports System.Windows.Forms
     
    Public Class MonDataGrid
        Inherits DataGrid
     
        Public Sub New()
            MyBase.New()
        End Sub
     
        Public Sub setRowHeight(ByVal rowindex As Integer, ByVal rowheight As Integer)
            Dim rows() As Object = GetRows()
            If rowindex < 0 Then
                For Each row As Object In rows
                    setHeight(row, rowheight)
                Next
            Else : setHeight(rows(rowindex), rowheight)
            End If
     
            Me.Finalize()
     
        End Sub
     
        Private Function GetRows() As Object()
            Dim bf As BindingFlags = BindingFlags.Instance Or BindingFlags.NonPublic
            Dim t As Type = Me.GetType.BaseType
            Dim mi As MethodInfo = t.GetMethod("get_DataGridRows", bf)
            Return CType((mi.Invoke(Me, Nothing)), Object())
        End Function
     
        Private Sub setHeight(ByVal row As Object, ByVal rowheight As Integer)
            row.GetType().GetProperty("Height").SetValue(row, rowheight, Nothing)
     
        End Sub
     
     
    End Class

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.NET] DataGrid et double click
    Par mic56 dans le forum Windows Forms
    Réponses: 15
    Dernier message: 01/11/2006, 04h37
  2. [VB.NET] Disparition scrollBar dans une DataGrid
    Par aphykite dans le forum Windows Forms
    Réponses: 4
    Dernier message: 06/10/2004, 10h29
  3. [VB.NET] Datagrid + CheckBox : Cocher toutes les cases
    Par sirex007 dans le forum ASP.NET
    Réponses: 5
    Dernier message: 24/05/2004, 15h33
  4. [VB.NET] Datagrid - Récupérer CheckBox cochées
    Par nmerydem dans le forum ASP.NET
    Réponses: 16
    Dernier message: 18/05/2004, 13h28
  5. [VB.NET] Datagrid dans tabstrip : bug ?
    Par necro dans le forum ASP.NET
    Réponses: 13
    Dernier message: 23/02/2004, 10h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo