Developpez.com

Plus de 14 000 cours et tutoriels en informatique professionnelle à consulter, à télécharger ou à visionner en vidéo.

FAQ ASP.NET / Delphi.NETConsultez toutes les FAQ

Nombre d'auteurs : 15, nombre de questions : 90, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireLes webforms

Ce problème est très récurent. Dans 99% des cas le problème vient du postback : Si vous remplissez votre dropdownlist dans le "Page_Load" de votre page, le code correct est :

 
Sélectionnez

					procedure TWebForm1.Page_Load(sender: System.Object; e: System.EventArgs);
					begin
					if not IsPostBack then
					begin
					// code pour remplir la dropdownlist
					end ;
					end ;
				

L'erreur fréquemment commise est d'oublier le "If not page.IsPostBack then" quand vous sélectionnez un objet de la dropdownlist, la page se recharge en faisant un postback, donc repasse par le "Page_Load et réinitialise votre dropdownlist. On spécifie donc qu'il ne faut pas réinitialiser la dropdownlist en cas de PostBack et on récupèrera ainsi la valeur sélectionnée.

Créé le 28 novembre 2004  par neo.51, bodbod

Afin de voir comment on ajoute dynamiquement un webcontrol à une page, nous allons prendre un exemple simple : ajouter un label à une page aspx.

Dans la page aspx, on ajoute un PlaceHolder :

 
Sélectionnez

					<asp:PlaceHolder id="PlaceHolder1" runat="server"></asp:PlaceHolder>
				

dans le code-behind

 
Sélectionnez

					procedure TWebForm1.Page_Load(sender: System.Object; e: System.EventArgs);
					var monlabel : System.Web.UI.WebControls.Label ;
					begin
					monlabel := Label.Create() ;
					PlaceHolder1.controls.add(monlabel) ;
					end ;
				

Vous avez là le code minimal pour ajouter un contrôle dynamiquement à une page aspx. Vous pouvez ensuite jouer sur les différentes propriétés et méthodes du webcontrol pour l'initialiser comme vous souhaitez.

Créé le 28 novembre 2004  par neo.51, bodbod

Nous allons voir dans cet exemple qu'il est très facile de créer dynamiquement des métas tags en ASP.NET dans le head de la page aspx :

 
Sélectionnez

					<meta http-equiv="Content-Language" id="languagePage" runat="server" />
					<meta name="Author" id="auteurPage" runat="server" />
					<meta name="Classification" id="classificationPage" runat="server" />
					<meta name="Description" id="descriptionPage" runat="server" />
					<meta name="keywords" id="keywordsPage" runat="server" />
				

dans le code-behind on déclare :

 
Sélectionnez

					Private
					languagePage : HtmlGenericControl ;
					auteurPage : HtmlGenericControl ;
					classificationPage : HtmlGenericControl ;
					descriptionPage : HtmlGenericControl ;
					keywordsPage : HtmlGenericControl ;
				

ensuite pour donner des valeurs aux métas tags :

 
Sélectionnez

					languagePage       := Page.FindControl('languagePage') as HtmlGenericControl ;
					auteurPage         := Page.FindControl('auteurPage') as HtmlGenericControl ;
					classificationPage := Page.FindControl('classificationPage') as HtmlGenericControl ;
					descriptionPage    := Page.FindControl('descriptionPage') as HtmlGenericControl ;
					keywordsPage       := Page.FindControl('keywordsPage') as HtmlGenericControl ;

					languagePage.Attributes('content') := 'fr' ;
					auteurPage.Attributes('content') := 'neo.51' ;
					classificationPage.Attributes('content') := 'developpement' ;
					descriptionPage.Attributes('content') := 'FAQ ASP.NET' ;
					keywordsPage.InnerText := 'asp.net, vb.net, FAQ' ;
				
Créé le 28 novembre 2004  par neo.51, johngt , bodbod

Nous allons ici utiliser un label, mais le code est valable pour les autres webcontrols. Le piège dans cette question est que la propriété "font" du label est en lecture seule !!! Il faut en fait passer par un style, un exemple :

 
Sélectionnez

					var monstyle : Style ;

					monstyle := Style.Create() ;
					monstyle.BorderColor := Color.Blue ;
					monstyle.BackColor   := Color.Black ;
					monstyle.ForeColor   := Color.Blue ;
					monstyle.Font.Name   := 'Verdana' ;
					monstyle.Font.Size   := 20 ;

					Lable1.ApplyStyle(monstyle) ;
				
Créé le 28 novembre 2004  par leduke, bodbod

Par défaut, le webuser control a accès à la css de la page dans laquelle il est inclus. L'intérêt est que le webuser control s'adapte parfaitement aux différentes pages dans lesquelles il est placé.

Cependant, si vous souhaitez quand même lier une css "spécifique" à un webuser control, il vous suffit d'ajouter dans la css :

 
Sélectionnez

					<LINK rel=stylesheet type="text/css" href="styles.css">
				

attention : si vous liez une css au webuser control faites attention d'utiliser des classes de css différentes que celles de la css des pages dans lesquelles vous allez inclure le webuser control.

Créé le 12 octobre 2003  par neo.51

Lien : Partie css de la FAQ html

Dans la procédure de création du bouton on ajoute :

 
Sélectionnez

					Include(Self.Button1.Click, Self.MesBoutons_Click1) ;
				



ensuite :

 
Sélectionnez

					procedure TWebForm1.MesBoutons_Click1(sender: System.Object; e: System.EventArgs);
					var Btn : Button ;
					begin
					Btn := sender as Button ;
					// Traitement
					...
					end ;
				



ATTENTION :Lors du postback éffectué aprés l'évènement, le bouton doit impérativement être rechargé dans la page pour que l'évènement soit traité. Quitte à mettre sa propriété visible à false si vous ne voulez pas qu'il soit visible.

Créé le 28 novembre 2004  par Déclic, neo.51, bodbod

On crée souvent un bouton "Précédent" ou "réinitialiser" dans ses pages web. Pourtant quand on clique sur ces boutons, les traitements qui lui sont associés doivent s'exécuter, même si le formulaire n'est pas validé par les validators.

Il suffit de mettre dans les propriétés de votre bouton : CausesValidation=false

Créé le 6 novembre 2003  par neo.51

Dans le Page_Load de la page aspx on ajoute :

 
Sélectionnez

					TextBox1.Attributes.Add('OnKeyUp','this.value=this.value.toUpperCase()') ;
				
Créé le 28 novembre 2004  par jane2002, bodbod
 
Sélectionnez


					<asp:label id="Labelcentre" Width="100%">
					<p align="center">Label centre</p></asp:label>
				



Ou en code behind :

 
Sélectionnez

					labelcentre.Text := '<p align="center">Label centre</p>' ;
				
Créé le 28 novembre 2004  par neo.51, bodbod

Lorsque l'on passe par le designer de Delphi.NET (et je suppose que c'est sensiblement pareil pour les autres IDE) lorsqu'on paramètre l'aspect de son Calendar, on paramètre en fait plusieurs styles. Par exemple, voici un Calendar ou j'ai personnalisé les styles :

 
Sélectionnez

					<asp:calendar id="Calendar1"  runat="server"
					Width="47px" Height="40px">
					<TodayDayStyle Font-Names="Arial" Font-Bold="True" ForeColor="Red"></TodayDayStyle>
					<SelectorStyle Font-Names="Arial"></SelectorStyle>
					<DayStyle Font-Names="Arial" ForeColor="#006600"></DayStyle>
					<NextPrevStyle Font-Names="Arial" ForeColor="White" BorderColor="#000600"
					BackColor="#006600"></NextPrevStyle>
					<DayHeaderStyle Font-Names="Arial" ForeColor="White" BorderColor="#006600"
					BackColor="#006600"></DayHeaderStyle>
					<SelectedDayStyle Font-Names="Arial"></SelectedDayStyle>
					<TitleStyle Font-Names="Arial" ForeColor="White" BorderColor="#006600"
					BackColor="#006600"></TitleStyle>
					<WeekendDayStyle Font-Names="Arial"></WeekendDayStyle>
					<OtherMonthDayStyle Font-Names="Arial" ForeColor="#006600" BorderColor="White"
					BackColor="White"></OtherMonthDayStyle>
					</asp:calendar>
				


Le soucis est que si votre application utilise plusieurs Calendar il faut soit faire du copier coller soit recréer tous les styles. On peut pourtant lier le Calendar à une Css. Plus exactement on peu lier chaque style à une classe Css. Par exemple, juste pour le DayHeaderStyle :
On déclare le calendar :

 
Sélectionnez

					<asp:calendar id="Calendar1" runat="server" Width="47px" Height="40px">
					<DayHeaderStyle CssClass="MyDayHeaderStyle"></DayHeaderStyle>
					</asp:calendar>
				


Dans votre Css :

 
Sélectionnez

					.MyDayHeaderStyle
					{
					background-color:#006600; /* BackColor */
					border-color:#006600;     /* BorderColor */
					color:White;              /* ForeColor */
					font-family:Arial;        /* Font */
					}
				



On fait de même avec tous les autres styles du Calendar.

ATTENTION : L'objet calendar a un comportement étrange lorsqu'on applique une Css sur des liens (les jours, mois suivant, mois précédent). Afin de s'assurer que les liens du calendar respectent la Css, il faut spécifier une règle sur la Css, par exemple :

 
Sélectionnez

					TD.OtherMonthDayStyle A
					{
					font-family : Arial ! important;
					color:#006600 ! important;
					}
				


Les styles affectés par ce comportement étrange du calendar et nécessitants ce type de classe Css sont :

  • OtherMonthDayStyle
  • TodayStyle
  • NextPrevStyle
Créé le 18 février 2004  par neo.51

Rien de tel qu'un exemple concret pour voir comment formater une date pour l'affichage :

 
Sélectionnez

					var dt : DateTime ;

					dt = DateTime.Create(1978,5,18) ;
					dt.ToString(param) ;
				

Voici les différents résultats que l'on obtient suivant la valeur de param :

Et pour les formats personnalisés:

  • d : jour 1 à 31
  • dd : jour 01 à 31.
  • ddd : abr d'un jour ex: sam. pour samedi
  • dddd : nom complet du jour
  • M : mois 1 à 12
  • MM : mois 01 à 12
  • MMM : abr d'un moi ax:jan. pour janvier
  • MMMM : nom complet du mois
  • y : année 1 à 99
  • yy : année 01 à 99
  • yyy : année 1 à 9999
  • h : heure 0 à 11
  • hh : heure 00 à 11
  • H : heure 0 à 23
  • HH : heure 00 à 23
  • m : minutte 0 à 59
  • mm : minutte 00 à 59
  • s : seconde 0 à 59
  • ss : seconde 00 à 59
  • "d" : 18/5/1978"
  • "D" : "jeudi 15 mai 1978"
  • "f" : "jeudi 15 mai 1978 08:05"
  • "F" : "jeudi 15 mai 1978 08:05:01"
  • "g" : "18/5/1978 08:05"
  • "G" : "18/5/1978 08:05:01"
  • "M" : "18 mai"
  • "R" : Date GMT en anglais --> Thu, 14 may 1978 09:05:01 GMT
  • "s" : Date pour les tris --> 1978-05-18T09:05:01
  • "t" : "08:05"
  • "T" : "08:05:01"
  • "u" : même chose que s mais en temp GMT
 
Sélectionnez

					dt.ToString('dddd, le d MM yyyy') ;
				

Donnera : Jeudi, le 18 05 1978

Créé le 28 novembre 2004  par neo.51, bodbod

Lien : Comment n'afficher que l'heure d'une champ type DateTime dans un datagrid ?

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.