vendredi 27 mars 2009

Expérience avec AjaxControlToolKit

AjaxControlToolkit est un ensemble de contrôles servers issu d’un partenariat entre Microsoft et la communauté d’ASP.NET Ajax. Il contient des contrôles extendeurs ainsi que des contrôles web permettant de construire une application internet riche. Les contrôles extendeurs sont des contrôles auxquels nous pouvons ajouter des scripts clients (JavaScript,..) dans l’événement du contrôle. AjaxControlToolkit met également à disposition des contrôles d’animation permettant d’ajouter des effets visuels plus sophistiqués dans une page web.

AjaxControlToolkit est construit à partir ASP.NET 2.0 Ajax Extension. Le dernier release fonctionne sur le Framework .NET 3.5 SP1. La release contient le code source complet. Ceci permet d’utiliser les contrôles existants ainsi que la création de nouveaux contrôles.

Les avantages :
- Un ensemble des contrôles prêts à utiliser,
- Une intégration aisée dans l’environnement Visual Studio 2008
- Un développement rapide d’une interface web sophistiquée
- Compatible avec de nombreux navigateur web
- Un site web dédié contenant la documentation et des exemples

Avant d’utiliser….
Il faut savoir qu’il s’agit d’un nouveau produit. Ainsi par manque de maturité, il est nécessaire de faire la validation des maquettes. La connaissance de JavaScript est parfois utile afin d’adapter les contrôles aux besoins très spécifiques du projet.


Téléchargement du package d’AjaxControlToolkit
Le package complet (avec code source) peut être téléchargé à partir de l’adresse suivante :
http://ajaxcontroltoolkit.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=16488


Les contenus téléchargés :
* AjaxControlToolkit – Contient la source ainsi que les contrôles d’Ajax* SampleWebsite – Site web qui montre comment utiliser les contrôles
* ToolkitTests – Site web qui contient des tests automatisés pour tous les contrôles
* AjaxControlExtender – Installeur de Template pour créer un nouveau contrôle extendeur avec Visual Studio 2008 SP1.

Pour commencer avec Visual Studio .NET 2008
1. Créer un nouveau site web.
2. Cliquer droit sur la boîte à outil -> Ajouter un onglet
3. Cliquer droit sur le nouveau onglet, sélectionner « Choisir les éléments ».
4. Cliquer sur le bouton « parcourir »
5. Aller dans le répertoire d’AjaxControlToolkit téléchargé. Sélectionner la dll AjaxControlToolkit.dll dans le répertoire « SampleWebSite/bin ».
6. Cliquer sur OK pour fermer la boite de dialogue.
L’ensemble des nouveaux contrôles seront visibles sur la boite à outil.

Lorsque nous faisons un drag and drop d’un de ces contrôles dans le formulaire web, la directive Registrer sera ajouté en haut de formulaire.
Afin d’éviter d’avoir cette déclaration dans plusieurs pages, nous pouvons très bien l’insérer une fois pour toute dans le fichier web.config. Pour cela, il faut déclarer dans la section configuration/system.web/pages/controls :
Par défaut le tagPrefix est nommé cc1. Remplacer avec un libellé plus compréhensible.

Afin de réaliser d’enchaînement des formulaires de validation, un web contrôle wizard est utilisé dans un contrôle d’extension Ajax UpdatePanel. Le wizard est affiché en pop up modal en grisant le contenu principal. Cela empêche l’utilisateur d’interagir avec la page principale pendant qu’il remplisse le wizard. Pour réaliser cela, le contrôle AjaxControlToolkit ModalPopupExtender est utilisé.

Le contrôle UpdatePanel permet de ne mettre à jour ses contenus lors d’un aller retour serveur.
Le contrôle Wizard permet d’avoir une interface multi étapes avec les boutons suivant-précédent et la gestion des états intégrés.
Le contrôle ModalPopupExtender permet d’ouvrir un élément de page en tant que pop up modal.
L’ouverture se fera côté client. Lorsqu’il est nécessaire de faire un postback, il suffit d’ajouter la propriété OnClick sur les boutons d’ouverture/de fermeture de pop up.

Ci-dessous un extrait de la page aspx :

Pour aller plus loin : http://ajaxcontroltoolkit.com/

mercredi 18 mars 2009

Could not load type 'System.Web.UI.ScriptReferenceBase'

I am currently working on a web site project using AjaxControlToolKit with .NET3.5 SP1.
Today I deploy the web site into a test server Windows 2008.
I was surprised as I got this message on the browser:
Could not load type 'System.Web.UI.ScriptReferenceBase' from assembly 'System.Web.Extensions, Version=3.5.0.0,...


After workaround I found that .NET3.5 is installed on my machine but not on the server.
But with this tricky solution, I did not need to install .NET3.5 SP1 version on server nor recompile my web site with .NET 3.5.

Replace ajaxToolkit:ToolkitScriptManager to asp:ScriptManager in the aspx file.


mardi 3 mars 2009

Générer Excel en C#

GENERATION EXCEL VIA OBJET COM
La génération utilise directement l’objet Excel installé sur le poste.
Avantages :
- Emuler l’interface d’utilisateur Excel, avoir la main sur chaque cellule Excel pour affter une valeur, la formater,…
- Le fichier généré du type d’Excel binaire (plus sécurisant)
Incovenients :
- Nécessite que Excel soit installé
- Le temps de génération est long si le fichier est volumineux
Mise en oeuvre
Pour povoir piloter Excel, il faut ajouter la référence vers le library d’Excel.
Ajouter ensuite dans la ligne directive « Using » cette ligne :
using Excel = Microsoft.Office.Interop.Excel;
Les classes les plus importantes dans le modèle d’objet Excel sont:
1. Microsoft.Office.Interop.Excel.Application représente l’application Excel
2. Microsoft.Office.Interop.Excel.Workbook représente un classeur dans l’application
3. Microsoft.Office.Interop.Excel.Worksheet représente une feuille d’Excel
4. Microsoft.Office.Interop.Excel.Range représente une cellule, une ligne, une colonne, une sélection de cellules contenant un ou plusieurs blocs de cellules. Avant de pouvoir manipuler une zone dans Excel, vous devez la spécifier comme étant un objet Range.

Dans cet exemple nous allons générer deux feuilles d’Excel. La première feuille contient une liste des notes et la deuxième feuille contient une liste des couleurs. Vous allez voir comment instancier on objet Excel, remplir chaque cellule, faire un formatage sur une cellule ainsi que sur un ensemble des cellules et enfin sauvegarder le fichier.

// Saisir le nom de fichier Excel à enregistrer
this.sfdExcel.FileName = "notes.xls";
if(this.sfdExcel.ShowDialog() == DialogResult.OK)
{
object Missing = System.Reflection.Missing.Value;

Excel.Application xlsApp;
Excel.Workbook xlsClasseur;
Excel.Worksheet xlsFeuille;
Excel.Range xlsRange;

// Créer un document Excel
xlsApp = new Excel.Application();
// Ne pas tenir compte des alertes
xlsApp.DisplayAlerts = false;

try
{
// Ajout d'un classeur
xlsClasseur = xlsApp.Workbooks.Add(true);

#region Première feuille
xlsFeuille = (Excel.Worksheet)xlsClasseur.Worksheets[1];

// Remplir la cellule [1,1] avec un libellé et mettre la couleur de fond gris
xlsFeuille.Cells[1,1] = "Ne pas modifier les données dans des cellules de cette couleur";
xlsRange = xlsFeuille.get_Range(xlsFeuille.Cells[1,1],xlsFeuille.Cells[1,5]);
xlsRange.Interior.ColorIndex = 15;
xlsRange.Merge(Missing);

// Les entêtes des colonnes
xlsFeuille.Cells[2,1] = "Nom";
xlsFeuille.Cells[2,2] = "Prénom";
xlsFeuille.Cells[2,3] = "Note";

// Les notes
xlsFeuille.Cells[3,1] = "LAGRANGE";
xlsFeuille.Cells[3,2] = "BERNADETH";
xlsFeuille.Cells[3,3] = 12.13;

xlsFeuille.Cells[4,1] = "LAMBUPOULOS";
xlsFeuille.Cells[4,2] = "ERIC";
xlsFeuille.Cells[4,3] = 17.51;

// Mettre la largeur de colonne suivant la longueur de texte
xlsRange = xlsFeuille.get_Range("A3","C3");
xlsRange.EntireColumn.AutoFit();

// Formatter les notes avec un seul virgule derrière
xlsRange = xlsFeuille.get_Range(xlsFeuille.Cells[3,3],xlsFeuille.Cells[4,3]);
xlsRange.NumberFormat = "0.0";


// Mettre les textes au milieu
xlsRange = xlsFeuille.get_Range(xlsFeuille.Cells[2,1],xlsFeuille.Cells[4,3]);
xlsRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;

// Mettre le border couleur noir
xlsRange = xlsFeuille.get_Range(xlsFeuille.Cells[2,1],xlsFeuille.Cells[4,3]);
xlsRange.Borders.ColorIndex = 1;

#endregion

#region Deuxième feuille
xlsFeuille = (Excel.Worksheet)xlsClasseur.Worksheets.Add(Missing,xlsFeuille,1,Missing);
// Liste des couleurs de fond
for(int i = 1; i <= 56; i++) { xlsFeuille.Cells[i, 1] = i; xlsRange = xlsFeuille.get_Range(xlsFeuille.Cells[i,2],xlsFeuille.Cells[i,2]); xlsRange.Interior.ColorIndex = i; } #endregion // Enregistrer

xlsApp.ActiveWorkbook.SaveAs(this.sfdExcel.FileName,
Missing, Missing, Missing, Missing, Missing, Excel.XlSaveAsAccessMode.xlNoChange,
Missing, Missing,
Missing, Missing, Missing);
……….
GENERATION EXCEL VIA XML
La génération d’Excel enregistre le fichier sous forme de feuille de calcul XML.
Avantages :-Il ne nécessite pas qu’Excel soit installé
-La génération est rapide même si la taille de fichier généré est volumineuse
Inconvénients :
-La taille de fichier généré peut être deux fois plus la taille de fichier Excel par défaut
-Le fichier est généré est un fichier XML qu’on peut ouvrir avec un logiciel de texte (moins sécurisant)
Mise en œuvre
Il existe un library permettent de générer Excel via XML facilement.

Ce library est téléchargeable à partir de :
http://www.carlosag.net/Tools/ExcelXmlWriter/

Il est gratuit et est écrit entièrement en C#.