Garder la position du scroll d'un datagrid

Signaler
Messages postés
20
Date d'inscription
mardi 2 août 2005
Statut
Membre
Dernière intervention
20 mai 2006
-
Messages postés
20
Date d'inscription
mardi 2 août 2005
Statut
Membre
Dernière intervention
20 mai 2006
-
Bonjour


Je fais une application web en asp.net vb.net et j'ai un datagrid avec un scrollbar et j'aimerai que lors du clic sur un hyperlink contenu dans le datagrid la position du scroll soie garder. Pour l'instant j'ai une petite fonction java script que j'ai trouvé sur le web, elle marche mais seulement quand je clic sur d'autre élement que l'hyperlink.


voici mon code en espérant que vous pourrez m'aider:

Fonction JAVAscript trouvé sur le web




   <script language="javascript">
        window.onload = function(){
           var strPos = document.getElementById("scrollPosHidden").value;
           document.getElementById("divGrid").scrollTop = strPos;
         }
      function SaveDivPosition(){     
        var intY = document.getElementById("divGrid").scrollTop;       
        document.getElementById("scrollPosHidden").value = intY;
      }
  
  window.onunload = savedivposition();
  window.onload = savedivposition();
  </script>

Code de création du scrollbar du datagrid:

Code de l'hyperlink:

            
            
             ' NavigateUrl='<%# "Rec.aspx?idprod=" 
               &amp; DataBinder.eval(Container.DataItem,"[Noart]") &amp; 
               "&amp;numliste=" &amp; dlliste.SelectedValue &amp;"&amp; SaveDivPosition()"%> '>
             
            

un peu le bordel je sais mais je débute
<?xml:namespace prefix = asp /?> " text="<%# DataBinder.Eval(Container, "DataItem.No Article Fabricant") %>" runat="server">

11 réponses

Messages postés
20
Date d'inscription
mardi 2 août 2005
Statut
Membre
Dernière intervention
20 mai 2006

juste un petit oubli

le hidden qui permet de stocké la position 

 
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
Bonjour,

Tu peux aussi utiliser la propriété de directive de page MaintainScrollPositionOnPostBack="true"

une directive de page c'est :
<% @ Page ... %>

<hr />Cyril - MVS - MCP
Messages postés
20
Date d'inscription
mardi 2 août 2005
Statut
Membre
Dernière intervention
20 mai 2006

J'ai essayer ta solution mais cela me cause une erreur c'est peut être moi qui ai pas bien compris ou il fallait le mettre alors voila ce que j'ai mis:


<%@ Page Language="vb" AutoEventWireup="false" Codebehind="Fabricant.aspx.vb" Inherits="ImportExport.WebForm" maintainScrollPositionOnPostBack="True"%>

et ca me retourne :L'attribut 'maintainScrollPositionOnPostBack' n'est pas pris en charge par la directive 'page'
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
Si tu travailles pas en .net2 c'est un autre attribut qu'il faut mettre, mais je me souviens plus :s

<hr />Cyril - MVS - MCP
Messages postés
20
Date d'inscription
mardi 2 août 2005
Statut
Membre
Dernière intervention
20 mai 2006

:'(
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
une simple recherche t'aurais donné la réponse ...

http://www.aspfr.com/infomsg_SCROLL-DATAGRID-REPOSITIONNEMENT_419003.aspx#2 

smartNavigation à True

<hr />Cyril - MVS - MCP
Messages postés
20
Date d'inscription
mardi 2 août 2005
Statut
Membre
Dernière intervention
20 mai 2006

Oui si je met smartnavigation ca garde la position de la page mais mon but est de garder la position du scrollbar du <div c'est a dire du datagrid qui est dedant
Messages postés
90
Date d'inscription
mardi 21 mars 2006
Statut
Membre
Dernière intervention
10 mai 2010

Bonjour,
J'utilise le même type de code pour un datalist. Ca marche impeccable. Par contre je n'ai pas mis les 2 derniers onload et onunload, ni le onclick sur le car à mon sens le onscroll suffit.
Par contre je ne comprends pas ce que tu recherches avec l'hyperlink et le scroll. Si tu te diriges vers une autre page alors ton datagrid n'est plus là. Quel fonctionnement souhaites-tu exactement ? Cherches-tu à garder la position en mémoire afin de se retrouver au bon endroit lors d'un prochain chargement ?
Messages postés
20
Date d'inscription
mardi 2 août 2005
Statut
Membre
Dernière intervention
20 mai 2006

Tu vas surement me prendre pour un débutant et tu aurais bien raison mais en fait mon hyperlink me renvoi sur la meme page mais affiche le détail des articles juste en dessou mais je pense que c'est ca mon erreur la redirection sur la meme page dois supprimer le renvoi de la position du scroll. Il y a un autre moyen pour renvoyer les paramètres ? oui je sais question débile lol
Messages postés
90
Date d'inscription
mardi 21 mars 2006
Statut
Membre
Dernière intervention
10 mai 2010

Bonjour,
Je me garderais bien de juger car je suis moi aussi un débutant ! Et tu avais repéré à juste titre la difficulté pour garder la bonne position su scroll (pour info j'ai d'ailleurs recopié ton code car le mien, très proche, passait par les cookies; par contre j'ai perdu du temps car en fait il y a une modif à faire si tu es dans une master page) .
L'hyperlink sur la même page ne me semble pas une grande idée...  
Dans mon cas par exemple, j'ai un datalist avec des photos en vignettes. En cliquant sur une des vignettes j'affiche la photo en grand en récupérant l'url de la photo sélectionnée. C'est certainement proche de ce que tu veux faire en passant des paramètres pour les exploiter ailleurs dans la page.
La solution : 
- ajouter un bouton 
- taper select dans command name dans sa fenêtre de propriétés. Celà le transforme en bouton de commande.
- mettre le code nécessaire sur l'évènement selectedindexchanged
exemple:Protected

Sub DataList1_SelectedIndexChanged(
ByVal sender
As
Object,
ByVal e
As System.EventArgs)
Handles DataList1.SelectedIndexChanged

Dim ImgBtn
As
New ImageButtonImgBtn = DataList1.SelectedItem.FindControl(

"ImageButton1")
ImgBtnZoom.ImageUrl = ImgBtn.ImageUrl

End
SubSi tu oublies de mettre le bouton en select, et si tu mets le code sur le click, alors ça ne marche pas car le changement d'index n'est pas repéré et tu ne sais donc pas où tu as cliqué...

Ca c'est une possibilité mais tu peux aussi, en mettant à nouveau un sélect, créer un formview ou un detailsview, ce qui est mieux si tu as un ensemble de détails à afficher sur un article. Il y a de nombreux exemples d'affichages maitre/details, souvent basés sur un gridview, ou un ddl maitre. Mais c'est exactement pareil:
- penser à créer le select, sinon c'est rapé
- penser à affected le datakeyfield (du type IdArticle dans ton cas)
- si tu as les détails de ton article dans une seconde table, créer le sqldatasource ou l'objectdatasource en question pour faire le tri sur l'IdArticle sélectionné
- et surtout en configurant cette source de données lui mettre le l'IdArticle de ton datagrid comme source de données.

Aucun code à saisir.

Pour finir et revenir sur le smartnavigation j'ai repéré que le plus grand avantage est qu'il élimine l'effet de flash de rafraichissement en cliquant sur des éléments, ce qui représentate un réel plus en terme de navigation. Par contre je crois que ça marche surtout avec IE...
A ce propos petite question : cette routine pour repérer le scroll fonctionne sous IE6. Cependant le onscroll est souligné dans mon code, et visual studio me dit que le onscroll n'est pas un élément de div et ne fonctionne pas sous IE6. Pourtant ça fonctione... As-tu des infos là dessus?
Merci

 
Messages postés
20
Date d'inscription
mardi 2 août 2005
Statut
Membre
Dernière intervention
20 mai 2006

Je vais tester ta solution lundi pour voir se que ca donne merci de ces explications je te tiendrais au courrant. Et pour ta petite question moi mon on scroll n'est pas souligné lol ce qui est bizarre mais tan que ca marche c'est le principal lol