OVH Cloud OVH Cloud

Descendre le scrollBar d'un datagridview

8 réponses
Avatar
http://cerbermail.com/?5RVJmRhSQw
bonjour,

j'ai un datagridview avec 5000 lignes, je selectionne la ligne 2000.
Biensur il la selectionne mais le scrollbar ne descend pas
automatiquement. y a t'il un moyen comme la méthode Ensure avec le
listview pour descendre le scrollbar a la ligne selectionnée.

merci

8 réponses

Avatar
Zoury
Salut !

Voici une méthode simple :
http://groups.google.com/group/microsoft.public.dotnet.framework.windowsforms.controls/browse_frm/thread/e6fdf6d5799decb1/bfae0e083ead160c?lnk=st&qÚtagridview+visible+group:*.dotnet.*&rnum&hl=fr#bfae0e083ead160c


--
Cordialement
Yanick
MVP pour Visual Basic
"http://cerbermail.com/?5RVJmRhSQw " <"http://cerbermail.com/?5RVJmRhSQw ">
a écrit dans le message de news: %
bonjour,

j'ai un datagridview avec 5000 lignes, je selectionne la ligne 2000.
Biensur il la selectionne mais le scrollbar ne descend pas
automatiquement. y a t'il un moyen comme la méthode Ensure avec le
listview pour descendre le scrollbar a la ligne selectionnée.

merci


Avatar
Christian
merci bcp
--
http://www.correzeweb.com
http://www.localetv.com
http://cerbermail.com/?5RVJmRhSQw
Avatar
http://cerbermail.com/?5RVJmRhSQw
Zoury a écrit :
Salut !

Voici une méthode simple :
http://groups.google.com/group/microsoft.public.dotnet.framework.windowsforms.controls/browse_frm/thread/e6fdf6d5799decb1/bfae0e083ead160c?lnk=st&qÚtagridview+visible+group:*.dotnet.*&rnum&hl=fr#bfae0e083ead160c




je viens de faire des tests avec ceci

biensur pour les tests j'initialise mon intindex a 1500 pour etre sur
quil bouge mais je ne voit rien bouger.De plus il passe bien dans
e.newValue = ...

Vois tu qque chose d'incoherent dans ce code?

merci

Me.dgvListe_Scroll(Me.dgvListe, New
ScrollEventArgs(ScrollEventType.LargeIncrement, intIndex)) 'Declaration
d'un nouvelle evenement sur le scrollBar, Je lie l'événement avec mon
DgvListe et lui dit d'aller faire l'action se trouvant dans la sub
dgvListe_Scroll




Private Sub dgvListe_Scroll(ByVal sender As Object, ByVal e As
System.Windows.Forms.ScrollEventArgs) Handles dgvListe.Scroll
'S'il y a eu un changement je descend le scrollbar a la ligne
selectionnée

If Me.Tag = "True" Then

If sender.SelectedRows.Count > 0 Then
e.NewValue = 1500 ' sender.SelectedRows(0).Index
End If

End If

End Sub
Avatar
Zoury
Salut Christian ! :O)

Tu n'as peut-être pas compris l'exemple... ;O)
Tu dois créer une classe qui hérite du DataGrid afin d'accéder à la
propriété "Protected" GridVScroll.

En voici un plus complet :
'***
Public Class DataGridEx
Inherits DataGrid

Public Sub EnsureRowVisible(ByVal index As Int32)

MyBase.GridVScrolled(Me, New
ScrollEventArgs(ScrollEventType.ThumbPosition, index))

End Sub

End Class
'***
Public Class Form1
Inherits System.Windows.Forms.Form


#Region " Code généré par le Concepteur Windows Form "

Public Sub New()
MyBase.New()

'Cet appel est requis par le Concepteur Windows Form.
InitializeComponent()

'Ajoutez une initialisation quelconque après l'appel
InitializeComponent()

End Sub

'La méthode substituée Dispose du formulaire pour nettoyer la liste des
composants.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

'Requis par le Concepteur Windows Form
Private components As System.ComponentModel.IContainer

'REMARQUE : la procédure suivante est requise par le Concepteur Windows
Form
'Elle peut être modifiée en utilisant le Concepteur Windows Form.
'Ne la modifiez pas en utilisant l'éditeur de code.
Friend WithEvents DataGrid1 As DataGridEx
<System.Diagnostics.DebuggerStepThrough()> Private Sub
InitializeComponent()
Me.DataGrid1 = New DataGridEx
CType(Me.DataGrid1,
System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'DataGrid1
'
Me.DataGrid1.DataMember = ""
Me.DataGrid1.HeaderForeColor =
System.Drawing.SystemColors.ControlText
Me.DataGrid1.Location = New System.Drawing.Point(8, 8)
Me.DataGrid1.Name = "DataGrid1"
Me.DataGrid1.Size = New System.Drawing.Size(424, 232)
Me.DataGrid1.TabIndex = 0
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(440, 246)
Me.Controls.Add(Me.DataGrid1)
Me.Name = "Form1"
Me.Text = "Form1"
CType(Me.DataGrid1,
System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)

End Sub

#End Region

Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load

Dim dt As New DataTable("Test")
dt.Columns.Add("Column1")

For i As Int32 = 0 To 100
dt.Rows.Add(New Object() {String.Format("Item {0}", i)})
Next

DataGrid1.DataSource = dt
DataGrid1.EnsureRowVisible(50) ' montre l'index 50

End Sub

End Class
'***


--
Cordialement
Yanick
MVP pour Visual Basic
"http://cerbermail.com/?5RVJmRhSQw " <"http://cerbermail.com/?5RVJmRhSQw ">
a écrit dans le message de news: %23QReK$
Zoury a écrit :
Salut !

Voici une méthode simple :
http://groups.google.com/group/microsoft.public.dotnet.framework.windowsforms.controls/browse_frm/thread/e6fdf6d5799decb1/bfae0e083ead160c?lnk=st&qÚtagridview+visible+group:*.dotnet.*&rnum&hl=fr#bfae0e083ead160c




je viens de faire des tests avec ceci

biensur pour les tests j'initialise mon intindex a 1500 pour etre sur quil
bouge mais je ne voit rien bouger.De plus il passe bien dans e.newValue =
...

Vois tu qque chose d'incoherent dans ce code?

merci

Me.dgvListe_Scroll(Me.dgvListe, New
ScrollEventArgs(ScrollEventType.LargeIncrement, intIndex)) 'Declaration
d'un nouvelle evenement sur le scrollBar, Je lie l'événement avec mon
DgvListe et lui dit d'aller faire l'action se trouvant dans la sub
dgvListe_Scroll




Private Sub dgvListe_Scroll(ByVal sender As Object, ByVal e As
System.Windows.Forms.ScrollEventArgs) Handles dgvListe.Scroll
'S'il y a eu un changement je descend le scrollbar a la ligne
selectionnée

If Me.Tag = "True" Then

If sender.SelectedRows.Count > 0 Then
e.NewValue = 1500 ' sender.SelectedRows(0).Index
End If

End If

End Sub


Avatar
Christian
a!!!! merci bcp
--
http://www.correzeweb.com
http://www.localetv.com
http://cerbermail.com/?5RVJmRhSQw
Avatar
http://cerbermail.com/?5RVJmRhSQw
Zoury a écrit :
Salut Christian ! :O)

Tu n'as peut-être pas compris l'exemple... ;O)
Tu dois créer une classe qui hérite du DataGrid afin d'accéder à la
propriété "Protected" GridVScroll.

En voici un plus complet :
'***
Public Class DataGridEx
Inherits DataGrid

Public Sub EnsureRowVisible(ByVal index As Int32)

MyBase.GridVScrolled(Me, New
ScrollEventArgs(ScrollEventType.ThumbPosition, index))

End Sub

End Class
'***
Public Class Form1
Inherits System.Windows.Forms.Form


#Region " Code généré par le Concepteur Windows Form "

Public Sub New()
MyBase.New()

'Cet appel est requis par le Concepteur Windows Form.
InitializeComponent()

'Ajoutez une initialisation quelconque après l'appel
InitializeComponent()

End Sub

'La méthode substituée Dispose du formulaire pour nettoyer la liste des
composants.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

'Requis par le Concepteur Windows Form
Private components As System.ComponentModel.IContainer

'REMARQUE : la procédure suivante est requise par le Concepteur Windows
Form
'Elle peut être modifiée en utilisant le Concepteur Windows Form.
'Ne la modifiez pas en utilisant l'éditeur de code.
Friend WithEvents DataGrid1 As DataGridEx
<System.Diagnostics.DebuggerStepThrough()> Private Sub
InitializeComponent()
Me.DataGrid1 = New DataGridEx
CType(Me.DataGrid1,
System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'DataGrid1
'
Me.DataGrid1.DataMember = ""
Me.DataGrid1.HeaderForeColor =
System.Drawing.SystemColors.ControlText
Me.DataGrid1.Location = New System.Drawing.Point(8, 8)
Me.DataGrid1.Name = "DataGrid1"
Me.DataGrid1.Size = New System.Drawing.Size(424, 232)
Me.DataGrid1.TabIndex = 0
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(440, 246)
Me.Controls.Add(Me.DataGrid1)
Me.Name = "Form1"
Me.Text = "Form1"
CType(Me.DataGrid1,
System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)

End Sub

#End Region

Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load

Dim dt As New DataTable("Test")
dt.Columns.Add("Column1")

For i As Int32 = 0 To 100
dt.Rows.Add(New Object() {String.Format("Item {0}", i)})
Next

DataGrid1.DataSource = dt
DataGrid1.EnsureRowVisible(50) ' montre l'index 50

End Sub

End Class
'***




ok je viens de tester mais mon probleme persiste puisque ici je redefini
un datagrid et non un DataGridView. La methode GridVScroll n'existe
pas dans le datagridView, Aurais tu une autre solution

merci
Avatar
Zoury
hmmm.. je n'ai pas VS.NET 2005 pour tester, mais tu pourrais essayer via les
API..

Essai de voir si tu ne pourrait pas réutiliser le code de cet exemple qui
permet de faire bouger les scrollbars par programmation.
http://groups.google.com/group/microsoft.public.fr.dotnet.vb/browse_frm/thread/96a871c5e3d71524/8fbe8b1021e59c16?lnk=st&q=image+scroll+group:*.dotnet.*+author:zoury&rnum=1&hl=fr#8fbe8b1021e59c16

--
Cordialement
Yanick
MVP pour Visual Basic

"http://cerbermail.com/?5RVJmRhSQw " <"http://cerbermail.com/?5RVJmRhSQw ">
a écrit dans le message de news:
Zoury a écrit :
Salut Christian ! :O)

Tu n'as peut-être pas compris l'exemple... ;O)
Tu dois créer une classe qui hérite du DataGrid afin d'accéder à la
propriété "Protected" GridVScroll.

En voici un plus complet :
'***
Public Class DataGridEx
Inherits DataGrid

Public Sub EnsureRowVisible(ByVal index As Int32)

MyBase.GridVScrolled(Me, New
ScrollEventArgs(ScrollEventType.ThumbPosition, index))

End Sub

End Class
'***
Public Class Form1
Inherits System.Windows.Forms.Form


#Region " Code généré par le Concepteur Windows Form "

Public Sub New()
MyBase.New()

'Cet appel est requis par le Concepteur Windows Form.
InitializeComponent()

'Ajoutez une initialisation quelconque après l'appel
InitializeComponent()

End Sub

'La méthode substituée Dispose du formulaire pour nettoyer la liste
des composants.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

'Requis par le Concepteur Windows Form
Private components As System.ComponentModel.IContainer

'REMARQUE : la procédure suivante est requise par le Concepteur
Windows Form
'Elle peut être modifiée en utilisant le Concepteur Windows Form.
'Ne la modifiez pas en utilisant l'éditeur de code.
Friend WithEvents DataGrid1 As DataGridEx
<System.Diagnostics.DebuggerStepThrough()> Private Sub
InitializeComponent()
Me.DataGrid1 = New DataGridEx
CType(Me.DataGrid1,
System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'DataGrid1
'
Me.DataGrid1.DataMember = ""
Me.DataGrid1.HeaderForeColor =
System.Drawing.SystemColors.ControlText
Me.DataGrid1.Location = New System.Drawing.Point(8, 8)
Me.DataGrid1.Name = "DataGrid1"
Me.DataGrid1.Size = New System.Drawing.Size(424, 232)
Me.DataGrid1.TabIndex = 0
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(440, 246)
Me.Controls.Add(Me.DataGrid1)
Me.Name = "Form1"
Me.Text = "Form1"
CType(Me.DataGrid1,
System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)

End Sub

#End Region

Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load

Dim dt As New DataTable("Test")
dt.Columns.Add("Column1")

For i As Int32 = 0 To 100
dt.Rows.Add(New Object() {String.Format("Item {0}", i)})
Next

DataGrid1.DataSource = dt
DataGrid1.EnsureRowVisible(50) ' montre l'index 50

End Sub

End Class
'***




ok je viens de tester mais mon probleme persiste puisque ici je redefini
un datagrid et non un DataGridView. La methode GridVScroll n'existe pas
dans le datagridView, Aurais tu une autre solution

merci


Avatar
http://cerbermail.com/?5RVJmRhSQw
Zoury a écrit :
hmmm.. je n'ai pas VS.NET 2005 pour tester, mais tu pourrais essayer via les
API..

Essai de voir si tu ne pourrait pas réutiliser le code de cet exemple qui
permet de faire bouger les scrollbars par programmation.
http://groups.google.com/group/microsoft.public.fr.dotnet.vb/browse_frm/thread/96a871c5e3d71524/8fbe8b1021e59c16?lnk=st&q=image+scroll+group:*.dotnet.*+author:zoury&rnum=1&hl=fr#8fbe8b1021e59c16



ca devient franchement le bordel pour faire un truc simple :(, bon pas
grave j'y reviendrais plus tard. Merci bcp