Accéder aux ressources depuis le code behind

 01/01/2019 |   Admin |  C#


label.Text = Resources.NomDuFichier.NomDeLaRessource;

Lire >>

Langue dans laquelle le client utilise son navigateur

 01/01/2019 |   Admin |  C#


using System.Globalization;

 

CultureInfo ci = new CultureInfo(Request.UserLanguages[0]);

string langue = ci.ToString();


[0] -> ordre de préférence du client

Lire >>

Réinitialiser l'auto incrémentation sur sql server

 01/01/2019 |   Admin |  Sql Server


Pour réinitialiser la valeur de départ d'une colonne auto-incrémentée, deux solutions :

  • Le truncate qui va supprimer toutes les données et réinitialiser le compteur à 0
TRUNCATE NomDeLaTable
  • Le checkident qui va remettre la valeur du compteur à la valeur voulue
DBCC CHECKIDENT (NomDeLaTable, RESEED, LaValeurVoulue)

Lire >>

Utiliser un rating control dans une GridView

 01/01/2019 |   Admin |  C#


Partie cliente, page aspx

<asp:GridView runat="server"
ID="theGridView"
AutoGenerateColumns="false" >
<Columns>
<asp:TemplateField>
<ItemTemplate>
<table>
<tr>
<td colspan="2">
<%# Eval("texte") %>
</td>
</tr>
<tr>
<td>
<act:Rating
ID="RatingBlague"
runat="server"
MaxRating="6"
CssClass="ratingStar"
StarCssClass="ratingItem"
WaitingStarCssClass="Saved"
FilledStarCssClass="Filled"
EmptyStarCssClass="Empty"
BorderStyle="None"
CurrentRating='<%# Eval("Rang") %>'
Tag='<%# Eval("Id")  %>'
OnChanged="RatingBlague_Changed">
</act:Rating>
</td>
</tr>
</table>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>

CSS

/*RATING*/
 
.ratingStar
{
       white-space: nowrap;
       margin: 1em;
       height: 14px;
       border-style:none;
       border-color:transparent;
}
 
.ratingStar .ratingItem
{
       font-size: 0pt;
       width: 25px;
       height: 25px;
       margin: 0px;
       padding: 0px;
       display: block;
       background-repeat: no-repeat;
       cursor: pointer;
}
 
.ratingStar .Filled
{
       background-image: url(images/ratingStarFilled2.png);
}
 
.ratingStar .Empty
{
       background-image: url(images/ratingStarEmpty2.png);
}
 
.ratingStar .Saved
{
       background-image:
...

Lire >>

Tutorial : Linq to Xml

 01/01/2019 |   Admin |  ASP MVC


Ce tutorial a pour but de montrer comment manipuler un fichier à l'aide de Linq to Xml.

A travers cet exemple on pourra voir la création, la mise à jour, la suppression et la recherche dans un document xml.

1. Créer un nouveau site web

  • Fichier, Nouveau site web

2. Ajouter la classe Voiture

Clique droit sur le nom du site, ajouter un nouvel élément, classe : Voiture.cs

Y ajouter les propriétés suivantes :

Résultat :

//-----------------------------------------------------------------------
// <copyright file="Voiture.cs" company="CNED">
//     Copyright (c) PHN. All rights reserved.
// </copyright>
// <author>PHN</author>
// <date>07/06/2010</date>
//-----------------------------------------------------------------------
using System;
using System.ComponentModel;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
 
/// <summary>
/// Voiture Class
/// </summary>
[Serializable]
public class Voiture
{
    #region CONSTANTES
 
    /// <summary>
    /// Noeud Voiture dans le fichier XML
    /// </summary>
    public const string VOITURE = "VOITURE";
 
    /// <summary>
    /// ID dans le fichier xml
    /// </summary>
    public const string ID = "ID";
 
    /// <summary>
    /// DATE_ACHAT dans le fichier XML
    /// </summary>
    public const string DATE_ACHAT = "DATE_ACHAT";
 
    /// <summary>
    /// MARQUE dans le fichier XML
    /// </summary>
    public const string MARQUE = "MARQUE";
 
    /// <summary>
    /// POIDS dans le fichier XML
    /// </summary>
    public const string POIDS = "POIDS";
 
    /// <summary>
    /// PRIX dans le fichier XML
    /// </summary>
    public const string PRIX = "PRIX";
 
    #endregion
 
    #region CONSTRUCTEUR
 
    /// <summary>
    /// Initializes a new instance of the Voiture class
    /// </summary>
    public Voiture()
    {
    }
 
    #endregion

    #region PROPRIETES

    /// <summary>
    /// Gets or sets Id
    /// </summary>
    public long Id { get; set; }

    /// <summary>
    /// Gets or sets Marque
    /// </summary>
    public string Marque { get; set; }

    /// <summary>
    /// Gets or sets Poids
    /// </summary>
    public int Poids { get; set; }
 
    /// <summary>
    /// Gets or sets DateAchat
    /// </summary>
    public DateTime DateAchat { get; set; }

    /// <summary>
    /// Gets or sets Prix
    /// </summary>
    public double Prix { get; set; }
 
    #endregion
}

1. 3.  Ajouter la classe VoitureService.cs qui contiendra la liste des méthodes avec les méthodes suivantes :

-          GetAll

-          GetById

-          Update

-          Insert

-          Delete

-          GetByMarque

-          GetNewId

Ne pas oublier de rajouter les using suivants :

using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;

  • GetAll

  •   #region GetAll
     
        /// <summary>
        /// Retourne toutes les voitures
        /// </summary>
        /// <param name="xmlFile">Le nom du fichier Xml</param>
        /// <returns>Une liste de voitures</returns>
        public IList<Voiture> GetAll(string xmlFile)
        {
            IList<Voiture> lsVoitures = null;
     
            XDocument xmlDoc = XDocument.Load(xmlFile);
     
            lsVoitures = (from voiture in xmlDoc.Descendants(Voiture.VOITURE)
                          select new Voiture
                          {
                              Id = Convert.ToInt32(voiture.Element(Voiture.ID).Value),
                              DateAchat = Convert.ToDateTime(voiture.Element(Voiture.DATE_ACHAT).Value),
                              Marque = voiture.Element(Voiture.MARQUE).Value,
                              Poids = Convert.ToInt32(voiture.Element(Voiture.POIDS).Value),
                              Prix = Convert.ToDouble(voiture.Element(Voiture.PRIX).Value)
                          }
     
                          ).ToList<Voiture>();
     
            return lsVoitures;
        }
     
        #endregion
    
  • GetById

  •  #region GetById
     
        /// <summary>
        /// Retourne une voiture en fonction de son identifiant
        /// </summary>
        /// <param name="id">Identifiant de la voiture</param>
        /// <param name="xmlFile">Emplacement du fichier Xml</param>
        /// <returns>Une voiture</returns>
        public Voiture GetById(long id, string xmlFile)
        {
            Voiture theVoiture = new Voiture();
     
            XDocument xmlDoc = XDocument.Load(xmlFile);
     
            theVoiture = (from voiture in xmlDoc.Descendants(Voiture.VOITURE)
                          where voiture.Element(Voiture.ID).Value == id.ToString()
                          select new Voiture
                          {
                              Id = Convert.ToInt32(voiture.Element(Voiture.ID).Value),
                              DateAchat = Convert.ToDateTime(voiture.Element(Voiture.DATE_ACHAT).Value),
                              Marque = voiture.Element(Voiture.MARQUE).Value,
                              Poids = Convert.ToInt32(voiture.Element(Voiture.POIDS).Value),
                              Prix = Convert.ToDouble(voiture.Element(Voiture.PRIX).Value)
                          }
     
                          ).Single<Voiture>();
     
            return theVoiture;
        }
     
        #endregion
    
     
    
  • Insert

  •  #region Insert
     
        /// <summary>
        /// Insertion d'une nouvelle voiture
        /// </summary>
        /// <param name="voiture">La nouvelle voiture</param>
        /// <param name="flux">Flux du fichier XML</param>
        /// <returns>true si ok, sinon false</returns>
        public bool Insert(Voiture voiture, string flux)
        {
            try
            {
                XElement doc = XElement.Load(flux);
     
                voiture.Id = this.GetNewId(flux);
     
                XElement newVoiture = new XElement(
        Voiture.VOITURE,
           new XElement(Voiture.ID, voiture.Id),
           new XElement(Voiture.DATE_ACHAT, voiture.DateAchat.ToString("dd/MM/yyyy")),
           new XElement(Voiture.MARQUE, voiture.Marque),
           new XElement(Voiture.POIDS, voiture.Poids),
           new XElement(Voiture.PRIX, voiture.Prix));
     
                doc.Add(newVoiture);
                doc.Save(flux);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
     
        #endregion
    
  • Update

  • #region Update
     
        /// <summary>
        /// Mise à jour d'une voiture
        /// </summary>
        /// <param name="voiture">La voiture à mettre à jour</param>
        /// <param name="flux">Flux du fichier XML</param>
        /// <returns>true si ok, sinon false</returns>
        public bool Update(Voiture voiture, string flux)
        {
            try
            {
                XDocument xmlDoc = XDocument.Load(flux);
     
                IEnumerable<XElement> theVoiture = from voit in xmlDoc.Descendants(Voiture.VOITURE)
                                                   where ((string)voit.Element(Voiture.ID)).Equals(voiture.Id.ToString())
                                                   select voit;
     
                foreach (XElement xe in theVoiture)
                {
                    xe.SetElementValue(Voiture.DATE_ACHAT, voiture.DateAchat.ToString("dd/MM/yyyy"));
                    xe.SetElementValue(Voiture.MARQUE, voiture.Marque);
                    xe.SetElementValue(Voiture.POIDS, voiture.Poids);
                    xe.SetElementValue(Voiture.PRIX, voiture.Prix);
                }
     
                xmlDoc.Save(flux);
     
                return true;
            }
            catch (Exception)
            {
                return true;
            }
        }
     
        #endregion
    
  • Delete

  • #region Delete
     
        /// <summary>
        /// Suppression d'une voiture
        /// </summary>
        /// <param name="voiture">La voiture à supprimer</param>
        /// <param name="flux">Flux du fichier XML</param>
        /// <returns>true si ok, sinon false</returns>
        public bool Delete(Voiture voiture, string flux)
        {
            try
            {
                XElement doc = XElement.Load(flux);
     
                IEnumerable<XElement> voitureToDelete =
    from voit in doc.Elements(Voiture.VOITURE)
                      where voit.Element(Voiture.ID).Value == voiture.Id.ToString()
                      select voit;
     
                foreach (XElement xe in voitureToDelete)
                {
                    xe.Remove();
                }
     
                doc.Save(flux);
     
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
     
        #endregion
    
  • GetByMarque

  • #region GetByMarque
     
        /// <summary>
        /// Retourne une voiture en fonction de sa marque
        /// </summary>
        /// <param name="marque">Marque de la voiture</param>
        /// <param name="xmlFile">Emplacement du fichier Xml</param>
        /// <returns>Une liste de voitures</returns>
        public IList<Voiture> GetByMarque(string marque, string xmlFile)
        {
            IList<Voiture> lsVoiture = null;
     
            XDocument xmlDoc = XDocument.Load(xmlFile);
     
            lsVoiture = (from voiture in xmlDoc.Descendants(Voiture.VOITURE)
                where voiture.Element(Voiture.MARQUE).Value.ToLower().Contains(marque)
                select new Voiture
                    {
            Id = Convert.ToInt32(voiture.Element(Voiture.ID).Value),
            DateAchat = Convert.ToDateTime(voiture.Element(Voiture.DATE_ACHAT).Value),
            Marque = voiture.Element(Voiture.MARQUE).Value,
            Poids = Convert.ToInt32(voiture.Element(Voiture.POIDS).Value),
            Prix = Convert.ToDouble(voiture.Element(Voiture.PRIX).Value)
                     }
     
                          ).ToList<Voiture>();
     
            return lsVoiture;
        }
     
    #endregion
    
  • GetNewId

  •  #region GetNewId
     
        /// <summary>
        /// Retourne le futur identifiant lors d'une création
        /// </summary>
        /// <param name="flux">Flux du fichier XML</param>
        /// <returns>Le nouvel identifiant</returns>
        private long GetNewId(string flux)
        {
            int nextId = 0;
     
            XDocument doc = XDocument.Load(flux);
     
            var voitures = from voiture in doc.Descendants(Voiture.VOITURE)
                           orderby (int)voiture.Element(Voiture.ID) descending
                           select new
                           {
                               newid = voiture.Element(Voiture.ID).Value,
                           };
     
            foreach (var voiture in voitures)
            {
                nextId = int.Parse(voiture.newid);
                break;
            }
     
            nextId++;
     
            return nextId;
        }
     
        #endregion
    

 

 

4. Ajouter la partie cliente, ici une page web

    • Page default.aspx
<table>
<tr>
<td align="center">
<asp:Button runat="server"
ID="btnGetAll"
Text="Obtenir toutes les voitures" OnClick="btnGetAll_Click" />
</td>
</tr>
<tr>
<td>
Recherche par marque :
<asp:TextBox runat="server" ID="txtSearchMarque"/>
<asp:Button runat="server"
ID="btnSearchMarque"
Text="Rechercher"
                        onclick="btnSearchMarque_Click"/>
</td>
</tr>
<tr>
<td>
<asp:GridView runat="server"
ID="gvVoitures"
AutoGenerateColumns="false" OnRowCommand="gvVoitures_RowCommand">
 <Columns>
  <asp:TemplateField>
   <ItemTemplate>
    <asp:Button runat="server"
ID="btnEditVoiture"
Text="Modifier"
CommandName="UpdateCar"
                             CommandArgument='<%# Eval("Id") %>' />
   </ItemTemplate>
  </asp:TemplateField>
 <asp:TemplateField>
  <ItemTemplate>
<asp:Button runat="server"
ID="btnDeleteVoiture"
Text="Supprimer"
CommandName="DeleteCar"
                             CommandArgument='<%# Eval("Id") %>' />
  </ItemTemplate>
 </asp:TemplateField>
 <asp:BoundField DataField="Marque" HeaderText="Marque" />
 <asp:BoundField DataField="Poids" HeaderText="Poids" />
 <asp:BoundField DataField="DateAchat" HeaderText="Date d'achat"
     DataFormatString="{0:dd/MM/yyyy}" />
 <asp:BoundField DataField="Prix" HeaderText="Prix" />
</Columns>
</asp:GridView>
</td>
</tr>
<tr>
<td align="center">
                    <asp:Button runat="server"
ID="btnAdd"
Text="Ajouter une voiture"
OnClick="btnAdd_Click" />
</td>
</tr>
</table>

<asp:Panel runat="server" ID="pnlDetail" Visible="false" Width="600px">
<table>
<tr>
<td style="width: 150px" align="right">
                        Marque :
</td>
<td style="width: 450px">
<asp:TextBox runat="server"
ID="txtMarque"
Width="90%"/>
</td>
</tr>
<tr>
<td align="right">
                        Poids :
</td>
<td>
<asp:TextBox runat="server"
ID="txtPoids"
Width="40%" />
</td>
</tr>
<tr>
<td align="right">
                        Date d'achat :
</td>
<td>
<asp:TextBox runat="server"
ID="txtDateAchat"
Width="40%" />
</td>
</tr>
<tr>
<td align="right">
                        Prix :
</td>
<td>
<asp:TextBox runat="server"
ID="txtPrix"
Width="40%" />
</td>
</tr>
<tr>
<td colspan="2" align="center">
<asp:Button runat="server"
ID="btnSave"
Text="Valider"
OnClick="btnSave_Click" />
</td>
</tr>
<tr>
<td colspan="2" align="center">
<asp:Label runat="server"
ID="lblErreur"
ForeColor="Red"></asp:Label>
</td>
</tr>
</table>
</asp:Panel>

 

  • CodeBehind
      • Déclaration des constantes
    #region CONSTANTES
     
        /// <summary>
        /// Nom du fichier XML
        /// </summary>
        private const string XML_FILE = "XMLFile.xml";
     
        /// <summary>
        /// Voiture en cours qui sera stockée dans un ViewState
        /// </summary>
        private const string VOITURE = "VOITURE";
     
        /// <summary>
        /// Mode actuel (update ou insert) stocké dans un ViewState
        /// </summary>
        private const string MODE = "MODE";
     
        /// <summary>
        /// Mode insert
        /// </summary>
        private const string INSERT = "INSERT";
     
        /// <summary>
        /// Mode Update
        /// </summary>
        private const string UPDATE = "UPDATE";
     
    
    #endregion
    
    
    
    • Remplir la GridView
/// <summary>
/// Remplir la grille des voitures
/// </summary>
private void FillGrid()
{
    gvVoitures.DataSource = new VoitureService().GetAll(Server.MapPath(XML_FILE));
    gvVoitures.DataBind();
}

 

    • Méthode permettant d'afficher une voiture
/// <summary>
/// Affichage d'une voiture dans le formulaire de détail
/// </summary>
private void AfficherVoiture()
{
Voiture voiture = (Voiture)ViewState[VOITURE];
txtMarque.Text = voiture.Marque;
txtPrix.Text = voiture.Prix.ToString();
txtPoids.Text = voiture.Poids.ToString();
txtDateAchat.Text = voiture.DateAchat.ToString("dd/MM/yyyy");
}

 

    • Méthode déclenchée lors de l'action sur la GridView
/// <summary>
/// RowCommand sur la grille des voitures (modification ou suppression)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void gvVoitures_RowCommand(object sender, GridViewCommandEventArgs e)
{
switch (e.CommandName)
{
case "UpdateCar":
 
ViewState[VOITURE] = new VoitureService().GetById(Convert.ToInt64(e.CommandArgument), Server.MapPath(XML_FILE));
AfficherVoiture();
pnlDetail.Visible = true;
 
ViewState[MODE] = UPDATE;
 
break;
 
case "DeleteCar":
 
Voiture voitureToDelete = new Voiture();
voitureToDelete.Id = Convert.ToInt64(e.CommandArgument);
 
new VoitureService().Delete(voitureToDelete, Server.MapPath(XML_FILE));
                FillGrid();
 
break;
}
 

}

 

    • Action sur les boutons
#region BOUTONS
 
    /// <summary>
    /// Obtenir toutes les voitures
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnGetAll_Click(object sender, EventArgs e)
    {
        FillGrid();
    }
 
    /// <summary>
    /// Bouton de sauvegarde
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnSave_Click(object sender, EventArgs e)
    {
        // Récupération du mode
        switch ((string)ViewState[MODE])
        {
            // Insertion d'une nouvelle voiture
            case INSERT:
 
                Voiture voitureToInsert = new Voiture();
 
                voitureToInsert.Marque = txtMarque.Text;
                voitureToInsert.DateAchat = Convert.ToDateTime(txtDateAchat.Text);
                voitureToInsert.Poids = Convert.ToInt32(txtPoids.Text);
                voitureToInsert.Prix = Convert.ToDouble(txtPrix.Text);
 
                new VoitureService().Insert(voitureToInsert, Server.MapPath(XML_FILE));
 
                break;
 
            // Mise à jour de la voiture
            case UPDATE:
 
                try
                {
                    // Récupération de la voiture actuelle dans le viewState
                    Voiture voitureToUpdate = (Voiture)ViewState[VOITURE];
 
                    voitureToUpdate.Marque = txtMarque.Text;
                    voitureToUpdate.DateAchat = Convert.ToDateTime(txtDateAchat.Text);
                    voitureToUpdate.Poids = Convert.ToInt32(txtPoids.Text);
                    voitureToUpdate.Prix = Convert.ToDouble(txtPrix.Text);
 
                    new VoitureService().Update(voitureToUpdate, Server.MapPath(XML_FILE));
                    lblErreur.Text = string.Empty;
                }
                catch (FormatException)
                {
                    lblErreur.Text = "Format des données incorrectes";
                }
                break;
        }
 
        FillGrid();
    }

 

/// <summary>
/// Bouton permettant d'ajouter une voiture
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnAdd_Click(object sender, EventArgs e)
{
ViewState[MODE] = INSERT;
pnlDetail.Visible = true;
 
txtMarque.Text = string.Empty;
txtPrix.Text = string.Empty;
txtPoids.Text = string.Empty;
txtDateAchat.Text = string.Empty;
}
 
    /// <summary>
    /// Bouton de recherche par marque
    /// Renvoi une liste de voitures en fonction de la marque
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnSearchMarque_Click(object sender, EventArgs e)
    {
        gvVoitures.DataSource = new VoitureService().GetByMarque(txtSearchMarque.Text.Trim().ToLower(), Server.MapPath(XML_FILE));
        gvVoitures.DataBind();
    }
 
#endregion

 

Lire >>

Configurer BlogEngine avec gmail

 01/01/2019 |   Admin |  BlogEngine


Ouvrir le fichier web.config,

  • Si la balise trust existe, modifier <trust level=“High“ />  en : <trust level=“Full“ />
  • Si la balise est absente, rajouter dans le noeud <system.web>, la ligne suivante <trust level=“Full“ />

Adresse mail : votreMail@gmail.com

SMTP server : smtp.gmail.com

Numéro de port : 25

Identifiant : votreMail@gmail.com

Mot de passe : votre mot de passe

Autoriser SSL : Oui

Envoyer un mail de commentaire: Oui

Subject prefix : Le préfixe qui vous sera envoyer dans le mail

Lire >>

Ouvrir ou fermer un CollapsiblePanel dans le code Behind

 01/01/2019 |   Admin |  C#


// Ouvrir le controlPanelExtender
this.cpe.Collapsed = false;
this.cpe.ClientState = "false";

// Fermer le controlPanelExtender
this.cpe.Collapsed = true;
this.cpe.ClientState = "true";

Lire >>

Ajouter à un CollapsiblePanelExtender, les événements OnExpanded et OnCollapsed

 01/01/2019 |   Admin |  Javascript


<script type="text/javascript">

//Ajout de deux événements au collapsible pannel
function cpeInit()
{
try
{
var cpe = $find('<%= cpe.ClientID %>');
cpe.add_expanded(cpeExpanded);
cpe.add_collapsed(cpeCollapsed);
}
catch (e)
{
 
}
}
 
//  A l’ouverture du panel
function cpeExpanded()
{
 
}
 
//  A la fermeture du panel
function cpeCollapsed()
{
 
}
 
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_pageLoaded(cpeInit);

</script>

Lire >>