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 :

N'afficher que le dernier élement d'une table dans un DetailView ou dans un GridView


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Homme Profil pro
    Informatique en tant qu'autodidacte passionné
    Inscrit en
    Mars 2009
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Informatique en tant qu'autodidacte passionné
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 189
    Billets dans le blog
    1
    Par défaut N'afficher que le dernier élement d'une table dans un DetailView ou dans un GridView
    Bonjour,

    J'utilise un DetailView pour afficher des images d'un album photo.

    Pour cela j'ai ajouté un champ ImageField.

    et les liens suivants dans les propriétés du champ ImageField:

    DataImageUrlField =NumPhoto ( qui est de type int)
    DataImageUrlFormatString = ~/album/photos/{0}.jpg

    Lorsque j'affiche mon DataView qui est relié par un sqlDataSource à ma table Image, ce dernier m'affiche toute la collection d'images et c'est ce que j'attendais.

    Mais, comment faire pour qu'un autre DetailView , associé à la même source , n'affiche que la dernière photo qu'un utilisateur vient d'ajouter à ma table Images ?

  2. #2
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 9
    Par défaut gridview
    faudrait penser à récuperer dans ta source quelque chose qui te permettrait de savoir le dernier enregistrement :
    ==> max(id) si id est une clé primaire auto-incrémentée
    ==> max(colonneDate) si il y a une colonne date

    et dans ta solution tu utilise une requete linq pour recuperer le dernier enregistrement et l'affecter à ta gridview

    je ne sais pas si j'ai répondu à ta question, sinon besoin de plus d'explication.

    Bon courage

  3. #3
    Membre confirmé

    Homme Profil pro
    Informatique en tant qu'autodidacte passionné
    Inscrit en
    Mars 2009
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Informatique en tant qu'autodidacte passionné
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 189
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par arichou Voir le message
    faudrait penser à récuperer dans ta source quelque chose qui te permettrait de savoir le dernier enregistrement :
    ==> max(id) si id est une clé primaire auto-incrémentée
    ==> max(colonneDate) si il y a une colonne date

    et dans ta solution tu utilise une requete linq pour recuperer le dernier enregistrement et l'affecter à ta gridview

    je ne sais pas si j'ai répondu à ta question, sinon besoin de plus d'explication.

    Bon courage
    Bonsoir,

    Merci d'avoir bien voulu m'aider.
    Afin que tu puisses situer ma problèmatique, voici plus d'explications.
    ---------------------------------------------------------------------------

    Mon application consiste en l'ajout d'images dans un album.
    Pour cela, l'utilisateur qui est au préalable authentifié , utilise un détailView pour pouvoir insérer des images (par l'intermédiaire d'un contrôle FileUpload que jai intégré dans le detailView en ajoutant un BoundField).

    La table Images comporte une clé primaire de type int auto incrémentée qui est IDImage, et une clef externe de type uniqueidentifier qui est IDUtilisateur.
    Elle comporte aussi une colone date de type datetime.

    En effet , pour que l'utilisateur puisse insérer une photo dans la table Images, il faut que les colonnes : Date et IDUtilisateur (qui n'acceptent pas bien sûr les valeurs nulles, soient implémentées).

    Ceci est fait de la manière suivante:

    un controle label dans la page , nommé lblIDUtilisateur récupère l'IDUtilisateur comme ceci après l'authentification

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
            lblUtilisateurID.Text = Membership.GetUser().ProviderUserKey.ToString()
        End Sub
    Pour insérer automatiqement les valeurs de IDUtilisateur et la date d'ajout je procède comme ceci:
    ( mon DétailView a comme ID, dvAjouterImages)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Protected Sub dvAjouterImages_ItemInserting(sender As Object, e As DetailsViewInsertEventArgs) Handles dvAjouterImages.ItemInserting
            e.Values("IDUtilisateur") = Membership.GetUser().ProviderUserKey
            e.Values("DateT") = DateTime.Now
        End Sub
    -------------------------------------------------------------------------------------------------
    En ce qui concerne , le numéro à attribuer à la nouvelle Image, puisque qu'on ne connait pas le numéro de celle qui la précède immédiatement, c'est compliqué , mais j'ai résolu le problème avec une procédure stockée qui est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     <asp:SqlDataSource ID="SqlDataSourceIDImgMax" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT MAX (IDImage)
    FROM Images
    WHERE IDUtilisateur =@IDUtilisateur">
            <SelectParameters>
                <asp:ControlParameter ControlID="lblIDUtilisateur" Name="IDUtilisateur" PropertyName="Text" />
            </SelectParameters>
         </asp:SqlDataSource>
    Ensuite, par programmation au niveau de DetailView lui même:

    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
    Protected Sub dvAjouterImages_ItemInserted(sender As Object, e As DetailsViewInsertedEventArgs) Handles dvAjouterImages.ItemInserted
     
            ' Si un nouvel enregistrement a été correctement ajouté à la table Images, 
            ' alors il faut enregistrer l'image qui vient d'être ajoutée
            If e.AffectedRows > 0 Then
                'Il faut d'abord déterminer le numéro maximal de cet enregistrement dans la table Images
                'On s'aide au passage du SqlDataSource qui contient la procédure stockée
     
                Dim Enregistrements As DataView = CType(SqlDataSourceIDImgMax.Select(DataSourceSelectArguments.Empty), DataView) 
     
                Dim NouvellePhoto As Integer = CType(Enregistrements(0)(0), Integer)   ' Qui me retourne (indexLigne) (indexColonne)
     
                'Je référence mon contrôle FileUpload comme ceci:
     
                Dim chargerPhoto As FileUpload = CType(dvAjouterImages.FindControl("chargerPhoto"), FileUpload)
                   ' Si le contrôle FileUpload n'est pas vide, alors j'enregistre ma nouvelle photo(je veux dire la nouvelle IDImage)
                If chargerPhoto.HasFile Then
                    Dim Chemin As String = Server.MapPath("~/albums/")
     
                    chargerPhoto.SaveAs(Chemin & NouvellePhoto & ".jpg")
                End If
            End If
    Maintenant, je suis content et je jubile, puisque je peux faire défiler toutes les photos de mon album dans dans un DetailView ou dans un GridView .
    Je me suis même permis le luxe de rajouter à ma table une colonne commentaire et une colonne titre ( de type nvarchar)

    Seulement, je reste un peu frustré car je souhaite afficher à l'utilisateur qui vient d'ajouter une photo, cette photo et elle seule (donc correspondant à la dernière IDImage), dans un autre DetailView ou GridView, afin qu'il se rende compte que son opération s'est bien déroulée.
    Et c'est seulement après que je vais le diriger vers l'album qui contient toute les photos avec le lien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DataImageUrlFormatString = ~/album/{0}.jpg
    Et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataImageUrlField=IDImage

    D'où ma question : comment afficher la dernière ligne d'une table dans un DetailView ou dans Un GridView.

Discussions similaires

  1. [MySQL] Requête avec en critère le dernier élement d'une table
    Par TabbHonmin dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/01/2014, 18h46
  2. [AC-2010] Afficher uniquement le dernier enregistrement d'une table liée
    Par sardaucar dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 12/11/2013, 15h45
  3. [AC-2003] Afficher les 100 derniers enregistrements d'une table
    Par Evolvana dans le forum VBA Access
    Réponses: 3
    Dernier message: 03/08/2011, 15h47
  4. Réponses: 7
    Dernier message: 28/03/2007, 13h57
  5. [MySQL] Afficher les 3 derniere entrer d'une base
    Par keishah dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 20/08/2006, 21h40

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