
Envoyé par
arichou
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
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)
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 :
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:
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
1 2
|
DataImageUrlFormatString = ~/album/{0}.jpg |
Et
DataImageUrlField=IDImage
D'où ma question : comment afficher la dernière ligne d'une table dans un DetailView ou dans Un GridView.
Partager