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

ASP.NET Discussion :

[WebForm] Faire scroller une treeview au lieu de dépasser de l’écran


Sujet :

ASP.NET

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 183
    Par défaut [WebForm] Faire scroller une treeview au lieu de dépasser de l’écran
    Bonjour à tous,

    NB: j'utilise VS 2012

    gros débutant sur ASP.Net, le bloque sur un problème :

    Mon "site.master" contient :

    - la nav-bar en haut (la barre de navigation d'origine)

    - une zone de contenu au centre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            <div class="container-fluid body-content">
                <asp:ContentPlaceHolder ID="MainContent" runat="server"> </asp:ContentPlaceHolder>
            </div>
    - une nav-bar en bas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            <nav class="navbar navbar-default navbar-fixed-bottom">
              <div class="container-fluid">
                    <footer class="footer">
                        <p>Test seb 02 &copy; <%: DateTime.Now.Year %></p>
                    </footer>
              </div>
            </nav>
    Mon "default.aspx" contient un treeview (dans un panel) sur la gauche et une zone de contenu (du texte actuellement) sur la droite.

    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
    <%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="testseb._Default" %>
     
    <asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
     
        <div class="container-fluid">
     
            <div class="row">
     
                <div class="col-xs-12 col-sm-12 col-md-2">
     
                    <asp:Panel ID="Panel1" runat="server" ScrollBars="Vertical">
                        <asp:TreeView ID="TreeView1" runat="server"> </asp:TreeView>
                    </asp:Panel>
     
                </div>
     
                <div class="hidden-xs hidden-sm col-md-10">
                    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi aliquam maximus mi, eget porttitor dolor semper et. Donec congue massa nec venenatis accumsan. Phasellus molestie elit ut egestas ullamcorper. Nullam ipsum lorem, semper vel ex et, suscipit dignissim odio. Pellentesque iaculis blandit mi, eu consequat tortor. Curabitur scelerisque purus ac mi maximus molestie. Ut hendrerit venenatis ex, a laoreet nibh mattis sed. Sed convallis neque at justo sollicitudin tempor. Aenean lacinia scelerisque ipsum nec tempus.Ut mattis, enim quis gravida tempus, libero est iaculis mauris, eu lobortis neque mauris et odio. Proin tortor ligula, pellentesque in mi a, dignissim condimentum dui. Sed non libero vitae lectus euismod fermentum id sit amet justo. Cras ut lacus nisl. Pellentesque commodo libero lacus, mollis imperdiet nibh ornare id. Aenean vitae mi at est pulvinar elementum sed nec turpis. Morbi et elit nunc. Integer feugiat non mi non dignissim. Praesent at volutpat ex. Interdum et malesuada fames ac ante ipsum primis in faucibus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Pellentesque viverra suscipit porta. Praesent diam ex, placerat nec erat in, mollis bibendum nulla. Mauris vulputate diam at ex sollicitudin aliquam.
                </div>
     
            </div>
     
        </div>
     
    </asp:Content>
    Mon treeview va se remplir dynamiquement et je voudrais que quand il y a trop de données pour l'écran, ce soit le treeview qui scrolle et non la page entière ( = que mon texte reste en place ).

    ça doit sans doute être simple mais je n'y arrive pas ...

    Merci, @+
    Seb.

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Tu peux utiliser la propriété overflow en CSS en veillant à définir une hauteur à partir de laquelle la scrollbar s'affichera :
    Code CSS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    .TaClass {
        width: 10px;
        height: 10px;
        overflow: scroll;
    }
    Plus d'info ici : CSS overflow Property.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre confirmé

    Développeur .NET
    Inscrit en
    Juillet 2008
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2008
    Messages : 176
    Par défaut
    Salut,

    Il te faut un conteneur à taille fixe et scrollable.

    Tu entoures ton treeview d'un div dont tu définis la taille et tu lui colles un overflow-x de type scrollbar (ou overflow-y). En gros ça lui dit : "Si t'as du contenu qui dépasse, fais moi apparaître une scollbar). Ca devrait résoudre ton souci. Comme tu l'auras compris sur mon hésitation entre x et y, tu peux gérer le débordement dans les deux sens (cela dit, deux scrollbars, c'est pas jojo).

    Bon courage.

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 183
    Par défaut
    Citation Envoyé par Arno_94 Voir le message
    Salut,

    Il te faut un conteneur à taille fixe et scrollable.

    Tu entoures ton treeview d'un div dont tu définis la taille et tu lui colles un overflow-x de type scrollbar (ou overflow-y). En gros ça lui dit : "Si t'as du contenu qui dépasse, fais moi apparaître une scollbar). Ca devrait résoudre ton souci. Comme tu l'auras compris sur mon hésitation entre x et y, tu peux gérer le débordement dans les deux sens (cela dit, deux scrollbars, c'est pas jojo).

    Bon courage.
    OK, mais je voudrais que mon treeview prenne toute la hauteur de l'écran ...

    NB: j'avais mis mon treeview dans un panel, je crois que c'est un peu l'idée que tu propose, non ?

    ... merci pour vos réponses, j’essaye de les appliquer ... c'est un poil chaud quand on débarque du WinForm ...

  5. #5
    Membre confirmé

    Développeur .NET
    Inscrit en
    Juillet 2008
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2008
    Messages : 176
    Par défaut
    Salut,

    Un panel est un contrôle serveur, je crois qu'il est traduit par "<div>".

    Ok, maintenant je comprends mieux ton besoin. Dans ce cas, il te faut faire un peu de JS. Mes exemples de code sont en jQuery.

    Donc, tu entoures ton treeview d'un div.

    Ensuite, tu te fais une petite méthode pour récupérer la taille de la fenêtre (à ne pas confondre avec la taille du document).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function GetWindowHeight()
    {
     return $(window).height();
    }
    Là, je récupère la taille "réelle", s'il y a des padding/margin à prendre en compte, il existe des fonctions outerHeight et innerHeight qui feront le calcul pour toi.

    Au chargement de la page :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $(document).ready(function){
         // On met la bonne hauteur au div conteneur
         $('#monDivConteneur').height(GetWindowHeight());
     
        // On s'abonne à l'événement window resize pour recalculer au besoin
        $(window).resize(function(){
            $('#monDivConteneur').height(GetWindowHeight());
        });
    }
    Voilà, de cette manière (il en existe d'autres), ton div conteneur aura la taille souhaitée même quand l'utilisateur resizera la fenêtre.

    A noter qu'il existe des fonctions d'animation dans jQuery, rien ne t'empèche d'effectuer le resize avec une animation de 200 ms, ce sera pas dégueu à regarder normalement...

    Bon courage

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 183
    Par défaut
    wwwooowwwww ...

    un grand merci à toi, je vais essayer de digérer tout ça ...

    Je vous tiens au jus.

    PS: si un panel est traduit par un <div>, il sert à rien du coup mon panel, non ?

    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
    <%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="testseb._Default" %>
     
    <asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
     
        <div class="container-fluid">
     
            <div class="row">
     
                <div class="col-xs-12 col-sm-12 col-md-2">
     
                    <asp:Panel ID="Panel1" runat="server" ScrollBars="Vertical">
                        <asp:TreeView ID="TreeView1" runat="server"> </asp:TreeView>
                    </asp:Panel>
     
                </div>
     
                <div class="hidden-xs hidden-sm col-md-10">
                    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi aliquam maximus mi, eget porttitor dolor semper et. Donec congue massa nec venenatis accumsan. Phasellus molestie elit ut egestas ullamcorper. Nullam ipsum lorem, semper vel ex et, suscipit dignissim odio. Pellentesque iaculis blandit mi, eu consequat tortor. Curabitur scelerisque purus ac mi maximus molestie. Ut hendrerit venenatis ex, a laoreet nibh mattis sed. Sed convallis neque at justo sollicitudin tempor. Aenean lacinia scelerisque ipsum nec tempus.Ut mattis, enim quis gravida tempus, libero est iaculis mauris, eu lobortis neque mauris et odio. Proin tortor ligula, pellentesque in mi a, dignissim condimentum dui. Sed non libero vitae lectus euismod fermentum id sit amet justo. Cras ut lacus nisl. Pellentesque commodo libero lacus, mollis imperdiet nibh ornare id. Aenean vitae mi at est pulvinar elementum sed nec turpis. Morbi et elit nunc. Integer feugiat non mi non dignissim. Praesent at volutpat ex. Interdum et malesuada fames ac ante ipsum primis in faucibus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Pellentesque viverra suscipit porta. Praesent diam ex, placerat nec erat in, mollis bibendum nulla. Mauris vulputate diam at ex sollicitudin aliquam.
                </div>
     
            </div>
     
        </div>
     
    </asp:Content>

  7. #7
    Membre confirmé

    Développeur .NET
    Inscrit en
    Juillet 2008
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2008
    Messages : 176
    Par défaut
    Panel est un contrôle ASP. Si tu as besoin d'y accéder côté serveur (ce que je ne pense pas par rapport à ton expression de besoin), alors oui, tu peux garder le panel.

    Si tu n'as aucun besoin côté serveur, autant utiliser un div, oui.

    En outre, pour peu que tu ne spécifies pas que tu souhaites travailler avec des ClientId statiques, ce sera pénible d'aller retrouver ton panel côté JS car l'id que tu auras défini dans le code behind sera transformé lorsqu'il générera le HTML.

    Typiquement, avec le panel, tu pourrais faire le calcul de la taille dans le PageLoad code behind mais tu ne pourrais pas gérer le changement de taille de la fenêtre, à moins d'injecter du javascript en code behind aussi, mais tout ceci n'est pas très joli et pas facile à maintenir.

    Je te conseille donc la version "full web" à base de HTML pur (div) et de JS.

    Bon courage.

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 183
    Par défaut
    OK, merci ...



    J'ai comme l’impression d'être à la ramass ...

  9. #9
    Membre confirmé

    Développeur .NET
    Inscrit en
    Juillet 2008
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2008
    Messages : 176
    Par défaut
    T'inquiètes, on l'a tous été (à la ramasse).

    Tu as déjà la bonne démarche de demander de l'aide et de t'intéresser aux réponses. C'est beaucoup mieux que de se morfondre dans son coin. C'est principalement grâce aux échanges sur différents forums et à la lecture de blogs de passionnés que j'ai progressé et qu'aujourd'hui, je suis en mesure d'aider les autres.

    J'en profite d'ailleurs pour passer un grand merci à toute la communauté Developpez qui est toujours là quand on a besoin d'elle

  10. #10
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 183
    Par défaut
    Ô pinaise ... ça marche !!!

    merci bien de votre aide !

Discussions similaires

  1. Faire scroller une page de x pixels au chargement ?
    Par guidav dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 16/07/2007, 17h59
  2. [PHP-JS] comment faire scroller une div
    Par Garra dans le forum Langage
    Réponses: 4
    Dernier message: 13/04/2007, 14h00
  3. Réponses: 2
    Dernier message: 13/02/2007, 17h40
  4. [VB.NET] Faire une recherche dans une treeview
    Par Aspic dans le forum VB.NET
    Réponses: 3
    Dernier message: 15/11/2005, 19h10
  5. comment faire scroller une MSFlexGrid
    Par sergio_bzh dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 15/11/2005, 11h19

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