Solved

GridView - Remember position of horizontal scrollbar on postback

Posted on 2008-11-01
5
1,972 Views
Last Modified: 2013-11-19
Hi
I have a gridview that is dynamically filled in - so don't know how many columns in design view.  
The columns need to be variable width - this is done in the Row_Created

   Dim td As TableCell
   For x = 1 To e.Row.Cells.Count - 1
     td = e.Row.Cells(x)
     td.Width = 70
   Next


I came to this after help on EE.


The horizontal scroll is displayed and user can navigate to right on gridview - gridview can't all be fitted on screen, maybe up to XXX columns.
The gridview column titles have link.  On clicking the link, there is a postback and values at top of screen are updated according to the column selected detailing all outputs in more user friendly way than a table.

The problem...
On postback, the horizontal position of scrollbar is forgotten. So the user could have scrolled well to the right off gridview to column 50 say, then on postback the horizontal scrollbar returns to left (column 1), and if the wanted detailed on column 51 they have to scroll all the way to right again.

So I want to maintain horizontal position of scrollbar if possible so user doesn't have to scroll all way to right again.
Had problems with AJAX on this page so don't want that route.

Thanks in advance
<asp:Panel ID="TablePanel" runat="server" Width="800px" Style="overflow: scroll;
     border: gray thin solid; border-width: 1px;" BorderColor="#FF6600">
     <div id="gridViewDiv" style="width: 5000px; background-color: Silver;">
         <asp:GridView ID="GridView1" runat="server" BackColor="white" GridLines="both" BorderStyle="Solid">
         </asp:GridView>
     </div>
</asp:Panel>

Open in new window

0
Comment
Question by:rwallacej
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
5 Comments
 
LVL 16

Accepted Solution

by:
Gyanendra Singh earned 500 total points
ID: 22856264
refer this link .. it will resolve your problem
http://forums.devx.com/showthread.php?t=154117
0
 

Author Comment

by:rwallacej
ID: 22856306
hi,
thanks for feedback.

I've taken the markup as Javascript from bottom of article (which seemed to be the solution), see below, but still don't retain positon.
I have put alert in the javascript to check it is called and it is.

can you advise further, please?
                <blockquote>
                    <div id="grdWithScroll" style="overflow:auto; width: 400px; background-color: Silver;" onscroll="SetDivPosition()">
                        <asp:GridView ID="GridView1" runat="server" BackColor="white" GridLines="both" BorderStyle="Solid">
                        </asp:GridView>
                    </div>
                </blockquote>
 
 
 
   <script type="text/javascript">
      window.onload = function(){
        var strCook = document.cookie;
        if(strCook.indexOf("!~")!=0){
          var intS = strCook.indexOf("!~");
          var intE = strCook.indexOf("~!");
          var strPos = strCook.substring(intS+2,intE);
          document.getElementById("grdWithScroll").scrollTop = strPos;
        }
      }
      
      function SetDivPosition(){
        var intY = document.getElementById("grdWithScroll").scrollTop;
        document.title = intY;
        document.cookie = "yPos=!~" + intY + "~!";
      }
    </script>

Open in new window

0
 

Author Comment

by:rwallacej
ID: 22856340
I should have put the code when it was changed to the position LEFT (I'm not bothered about vertical position). Here it is, but doesn't work
       window.onload = function(){
        var strCook = document.cookie;
        if(strCook.indexOf("!~")!=0){
            var intS = strCook.indexOf("!~");
            var intE = strCook.indexOf("~!");
            var strPos = strCook.substring(intS+2,intE);
            document.getElementById("grdWithScroll").scrollLeft = strPos;
        }
      }
      
      function SetDivPosition(){
        var intX = document.getElementById("grdWithScroll").scrollLeft;
        document.title = intX;
        document.cookie = "xPos=!~" + intX + "~!";
      }

Open in new window

0
 

Author Closing Comment

by:rwallacej
ID: 31512295
go it thanks.....needed to be the reference on my TablePanel not the DIV contained therein.
thank-you very much,
rwallacej
0
 
LVL 16

Expert Comment

by:Gyanendra Singh
ID: 22856978
your welcome
0

Featured Post

Instantly Create Instructional Tutorials

Contextual Guidance at the moment of need helps your employees adopt to new software or processes instantly. Boost knowledge retention and employee engagement step-by-step with one easy solution.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction Knockoutjs (Knockout) is a JavaScript framework (Model View ViewModel or MVVM framework).   The main ideology behind Knockout is to control from JavaScript how a page looks whilst creating an engaging user experience in the least …
Browsers only know CSS so your awesome SASS code needs to be translated into normal CSS. Here I'll try to explain what you should aim for in order to take full advantage of SASS.
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…
HTML5 has deprecated a few of the older ways of showing media as well as offering up a new way to create games and animations. Audio, video, and canvas are just a few of the adjustments made between XHTML and HTML5. As we learned in our last micr…
Suggested Courses

632 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question