IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

FAQ ASP.NET/VB.NET

logo
Sommaire > Les webforms > Affichage
        Comment lier un Calendar à une Css ?
        Comment formater une date pour l'affichage ?
        Comment changer le font d'un webcontrol en code-behind ?
        Comment lier une css à un webuser control ?
        Comment forcer la saisie en majuscule dans une textbox ?
        Comment centrer un texte à l'intérieur d'un label ?
        Comment colorer différemment chaque Item d'une DropDownList?
        Comment empêcher de sélectionner les dates passées dans un Calendar ?
        Comment faire un lien vers une page de manière relative et qui fonctionne quelque soit le répertoire dans lequel ce lien se trouve ?



Comment lier un Calendar à une Css ?
auteur : David Pedehourcq
Lorsque l'on passe par le designer de Visual Studio.NET ( et je supose 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 :

					<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 plusieur 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 :

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

Dans votre Css :

					.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 :

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

Les styles affectés par ce comportement étrange du calendar et nécéssitants ce type de classe Css sont :
  • OtherMonthDayStyle
  • TodayStyle
  • NextPrevStyle


Comment formater une date pour l'affichage ?
auteur : David Pedehourcq
Rien de tel qu'un exemple concret pour voir comment formater une date pour l'affichage :

					DateTime dt = new DateTime(1978,5,18)
					dt.ToString(param)
				
Voici les différents résultats que l'on obtient suivant la valeur de param :
  • "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


Et pour les formats personalisé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


dt.ToString("dddd, le d MM yyyy")
Donnera : Jeudi, le 18 05 1978

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

Comment changer le font d'un webcontrol en code-behind ?
auteur : leduke
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 :

					Dim monstyle As New Style

					monstyle.BorderColor = Color.Blue
					monstyle.BackColor = Color.Black
					monstyle.ForeColor = Color.Blue
					monstyle.Font.Name="Verdana"
					monstyle.Font.Size=20

					Lable1.ApplyStyle(monstyle)
				

Comment lier une css à un webuser control ?
auteur : David Pedehourcq
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 :

					<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.

lien : fr Partie css de la FAQ html

Comment forcer la saisie en majuscule dans une textbox ?
auteur : jane2002
Dans le Page_Load de la page aspx on rajoute :

TextBox1.Attributes.Add("OnKeyUp","this.value=this.value.toUpperCase()")

Comment centrer un texte à l'intérieur d'un label ?
auteur : David Pedehourcq


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

				


Ou en code behind :
labelcentre.Text="<p align=""center"">Label centre</p>"

Comment colorer différemment chaque Item d'une DropDownList?
auteur : Didier Danse
Soit une liste déroulante déclarée en html de telle manière (ou une DropDownList qui est l'équivalent en asp.NET):

					<SELECT id="Couleur" runat="server" name="Couleur" ></SELECT>

				
Cette liste a pour but d'afficher la liste des couleurs possibles avec la couleur en fond de chaque item. Dans le code de traitement, il suffit alors d'inclure

					Imports System.Reflection
				
et enfin d'ajouter les différents Items à la liste.

					For Each col As FieldInfo In GetType(KnownColor).GetFields
					If col.FieldType = GetType(KnownColor) Then
					Couleur.Items.Add(New ListItem(col.Name, col.Name))
					End If
					Next
					Dim i As Integer = 0
					While i < Couleur.Items.Count
					Couleur.Items(i).Attributes.Add("style", "background-color:" + Couleur.Items(i).Text)
					System.Math.Min(System.Threading.Interlocked.Increment(i),i-1)
					End While
				
On peut imaginer d'autres utilisations telles mettre en rouge la liste des factures non payées et en vert celles qui sont payées dans une application de gestion de factures.


Comment empêcher de sélectionner les dates passées dans un Calendar ?
auteur : Didier Danse
Dans l'évènement DayRender du calendar, vous pouvez savoir quelle est la date qui va être affichée. Dès lors, il ne reste plus qu'à tester si cette date est passée et lui indiquer qu'il n'est pas possible de le sélectionner.

					 
If Args.Day.Date < DateTime.Today Then
	Args.Day.IsSelectable = False
	Args.Cell.BackColor = Color.LightGray 
	Args.Cell.ForeColor = Color.Gray 
End If

				
Bien entendu, vous pouvez effectuer tous les tests que vous souhaitez (par exemple la sélection de date qui sont dans l'année en cours).


Comment faire un lien vers une page de manière relative et qui fonctionne quelque soit le répertoire dans lequel ce lien se trouve ?
auteurs : Didier Danse, Michaël LEBRETON
En ASP.NET, l'utilisation du ~/ est une fonctionalité serveur, faisant donc appel à un traitement sur le serveur.
La problématique
En effet, seul le serveur est en mesure de connaitre la racine de l'application Web. Cette affirmation peut sembler étonnante mais pour comprendre imaginons un domaine comme www.masociete.com. Ce domaine peut héberger autant d'application web qu'on le souhaite (qui peuvent d'ailleurs ne pas être toutes en ASP.NET). Nous pouvons donc avoir :
http://www.masociete.com : Portail de présentation de l'entreprise
http://www.masociete.com/Gestion : Portail de l'application de gestion
http://www.masociete.com/B2B : Portail de travail collaboratif
...

Vue du navigateur, qu'est-ce donc que la racine d'une application ? Comment doit-il interpréter une URL de la forme /Image/Monimage.gif ou ../MonDossier/Monfichier.htm ?
Au yeux du navigateur, ce sont des URLs relatives ! Elles sont relatives à l'URL saisie dans la barre d'adresse du navigateur.

L'opérateur racine
ASP.NET introduit l'opérateur racine (~) pour la raison expliquée ci-dessus. L'utilisation de cet opérateur dans une URL fait de cette URL une URL virtuelle. Puisqu'elle est virtuelle, il faudra lui appliquer un traitement pour la transfomer en une URL réelle. Ce traitement s'effectue sur le serveur. Pour preuve, si l'on reprend ce code :

					
<li><a href="~/Boutique/Commandes.aspx">Mes commandes</a></li>
				
Affichez votre page dans votre navigateur puis visualisez le code source, vous obtenez :

					
<li><a href="~/Boutique/Commandes.aspx">Mes commandes</a></li>

				
Et oui, le (~) est arrivé sur le navigateur pour qui il ne signifie absolument rien ! L'URL virtuelle n'a subie aucune transformation. Il faut a tout pris que le (~) soit traité par le serveur.
Solutions
Comme on le suggère ci dessus, il est possible d'utiliser WebControl HyperLink en lien et place de la balise HTML <a></a>. Le WebControl HyperLink étant un contrôle serveur Web, l'URL virtuelle sera correctement transformée.
Mais il est aussi possible de transformer la balise HTML <a></a> (qui est traité par ASP.NET comme du text litéral) en ce qu'on appel un HtmlControl, qui lui sera traité coté serveur. Il suffit de lui ajouter l'attribut runat="server" comme dans le code suivant :

					
<li><a href="~/Boutique/Commandes.aspx" runat="server">Mes commandes</a></li>
				
Testez la différence dans votre navigateur, vous verrez dans la source HTML que l'URL virtuelle a belle et bien étée transformée. Le serveur a fait son travail.
Limitations
Qu'il s'agisse de WebControl ou d'HtmlControl, l'utilisation de l'opérateur (~) n'est pas la panacée. Par exemple le code suivant ne fonctionnera pas :

					
<div style="background-image:url(~/Image/Monimage.jpg);" runat="serve"></div>
				
En effet, seules les propriétés marquées comme étant des urls bénéficient du mécanisme lié à l'utilisation de l'opérateur (~). Et là, pour resoudre le problème, il faut passer par une abstraction supplémentaire, mais c'est une autre histoire...



Consultez les autres F.A.Q's


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 © 2007 Dotnet Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni 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.