Member_2_6009151
asked on
VB.NET: Data Grid View Jumps to the Top of the Page When it Gains Focus
Hi,
I have a Windows Form, containing a Panel with scroll bars. Within the Panel is a few text boxes at the top of the page and a Data Grid View with a lot of data in it. The Data Grid View starts about half way down the Panel and goes off the bottom, so you have to use the Panel scroll bars to view the bottom of the data.
This is the way it is supposed to look and work.
Unfortunately if the user goes onto the page and clicks a row close to the top, the Panel automatically scrolls so that the Data Grid View is at the top of the screen. It also selects a number of rows instead of just the clicked one.
Does anyone know of a solution to this, other than changing the structure of the form?
If you need any further information then please let me know.
I have a Windows Form, containing a Panel with scroll bars. Within the Panel is a few text boxes at the top of the page and a Data Grid View with a lot of data in it. The Data Grid View starts about half way down the Panel and goes off the bottom, so you have to use the Panel scroll bars to view the bottom of the data.
This is the way it is supposed to look and work.
Unfortunately if the user goes onto the page and clicks a row close to the top, the Panel automatically scrolls so that the Data Grid View is at the top of the screen. It also selects a number of rows instead of just the clicked one.
Does anyone know of a solution to this, other than changing the structure of the form?
If you need any further information then please let me know.
I don't think you need a panel on the form, because you can set datagridview to have its own scroll bars, both vertical and horizontal. Since the datagridview takes up the lower part of the form, you can set its anchor to "Top, Bottom, Left, Right" so that when the form re-sizes, the datagridview changes the size accordingly.
Tab Index is a problem.
Please check available controls on your form, DataGrid view's tab index should be not smaller nor largest from all available controls those can take focus, reminder, label control cannot have focus, textbox, buttons can have focus.
Please check available controls on your form, DataGrid view's tab index should be not smaller nor largest from all available controls those can take focus, reminder, label control cannot have focus, textbox, buttons can have focus.
ASKER
Hi Guys,
I'm not sure how well i described my problem, but I have found the solution here.
http://www.daniweb.com/forums/showthread.php?t=6213&highlight=scroll+bar+problems+in+vb.net
(Towards the bottom of the first page.)
Basically it says to create a new control inherited from the Panel, and to change the scrolltocontrol function to the following...
protected override Point ScrollToControl(System.Win dows.Forms .Control activeControl) {
return this.AutoScrollPosition;
}
I haven't tried it yet but it looks like it should work fine.
Thanks for your help.
Kind regards,
Phil
I'm not sure how well i described my problem, but I have found the solution here.
http://www.daniweb.com/forums/showthread.php?t=6213&highlight=scroll+bar+problems+in+vb.net
(Towards the bottom of the first page.)
Basically it says to create a new control inherited from the Panel, and to change the scrolltocontrol function to the following...
protected override Point ScrollToControl(System.Win
return this.AutoScrollPosition;
}
I haven't tried it yet but it looks like it should work fine.
Thanks for your help.
Kind regards,
Phil
ASKER
I was wrong it hasn't worked at all. I am using the following code for the inherited class...
Public Class NonAutoscrollingPanel
Inherits System.Windows.Forms.Panel
Protected Shadows Function ScrollToControl(ByVal activeControl As System.Windows.Forms.Contr ol) As System.Drawing.Point
MsgBox("Test")
Return AutoScrollPosition
End Function
End Class
When clicking on the data grid view it doesn't even trigger the message box.
Let me know if you have any further suggestions or suggested fixes for this code.
Many thanks.
Public Class NonAutoscrollingPanel
Inherits System.Windows.Forms.Panel
Protected Shadows Function ScrollToControl(ByVal activeControl As System.Windows.Forms.Contr
MsgBox("Test")
Return AutoScrollPosition
End Function
End Class
When clicking on the data grid view it doesn't even trigger the message box.
Let me know if you have any further suggestions or suggested fixes for this code.
Many thanks.
Please post a screen shot of your form.
ASKER
Due to the sensitivity of the project I am unable to post the form, but instead I have recreated a very much simplified version of the form that still has all the components listed above and exhibits the same behaviour.
I have attached 2 screenshots to this post. The first is the form when it first loads up. The second is when the top row of the data grid view is clicked.
Let me know if you need any further information.
screenshot1.png
screenshot2.png
I have attached 2 screenshots to this post. The first is the form when it first loads up. The second is when the top row of the data grid view is clicked.
Let me know if you need any further information.
screenshot1.png
screenshot2.png
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Yeah I thought that may be the case.
I was hoping for another solution, but I don't think there is one. There are a few reasons why I wanted to keep the panel, but in this case I think I'm going to have to submit and do it that way.
I was hoping for another solution, but I don't think there is one. There are a few reasons why I wanted to keep the panel, but in this case I think I'm going to have to submit and do it that way.
Well, if you still want to keep the panel, you can. Just set its scrollbars to None and make the datagridview control not going beyond the panel.
ASKER
Won't that do the same jumping behaviour, if it goes off the bottom of the screen?
No it will not, because all the controls are on the screen. You scroll ONLY in the datagridview control. See the sample screenshot below:
Screenshot.PNG
Screenshot.PNG
ASKER
Ah right yes. That's fine then. I'll take that approach.
Many thanks for your help,
Phil
Many thanks for your help,
Phil
ASKER
Hi Everyone,
New update. The fix is possible after all, the link mentioned above did work, however I was not familiar enough with inheritance in vb.net to do it correctly. I replaced 'shadows' with 'overrides' and it all started working.
Public Class NonAutoscrollingPanel
Inherits System.Windows.Forms.Panel
Protected Overrides Function ScrollToControl(ByVal activeControl As System.Windows.Forms.Contr ol) As System.Drawing.Point
Return AutoScrollOffset
End Function
End Class
Thanks for your help.
Phil
New update. The fix is possible after all, the link mentioned above did work, however I was not familiar enough with inheritance in vb.net to do it correctly. I replaced 'shadows' with 'overrides' and it all started working.
Public Class NonAutoscrollingPanel
Inherits System.Windows.Forms.Panel
Protected Overrides Function ScrollToControl(ByVal activeControl As System.Windows.Forms.Contr
Return AutoScrollOffset
End Function
End Class
Thanks for your help.
Phil
ASKER
Slight correction...
Public Class NonAutoscrollingPanel
Inherits System.Windows.Forms.Panel
Protected Overrides Function ScrollToControl(ByVal activeControl As System.Windows.Forms.Contr ol) As System.Drawing.Point
Return AutoScrollPosition
End Function
End Class
Public Class NonAutoscrollingPanel
Inherits System.Windows.Forms.Panel
Protected Overrides Function ScrollToControl(ByVal activeControl As System.Windows.Forms.Contr
Return AutoScrollPosition
End Function
End Class
check initially the anchor of the datagridview.also set multiselect to false.check these and let me know if you have a problem