Coolforest.net

Aller au contenu | Aller au menu | Aller à la recherche

Plateforme .NET

C#, VB.NET, ASP.NET... et quelques fois Mono !

Fil des billets - Fil des commentaires

vendredi, novembre 16 2007

ASP.NET Forums

Un petit état de l'art des applications web de forum sur plateforme ASP.NET

Lire la suite...

lundi, octobre 8 2007

Problème de charset dans un fichier .ASPX / .ASCX déployé avec VS 2005 Web Deployment Projects

Certains caractères spéciaux sautent lors du déploiement d'un site avec VS 2005 Web Deployment Projects.

C'est notamment valable dans des UserControls .ascx inclus dans des page ASP.NET .aspx, et lorsque ces docuements utilisent des jeu de caractères diférents : Celui de l'.ascx n'est pas explicitement indiqué mais celui de l'.aspx est normalement indiqué dans

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Pour corriger ça, il faut ouvrir chaque page .aspx / .ascx en faisant un File > Advanced Save Options et choisir le bon charset (par exemple UNICODE (UTF-8 with signature) )

lundi, octobre 1 2007

Strip HTML Tags & Text

private void nettoyer_HTML(DataTable dt)
    {
        int iColCount = dt.Columns.Count;
        foreach (DataRow dr in dt.Rows)
        {
            for (int i = 0; i < iColCount; i++)
            {
                if (!Convert.IsDBNull(dr[i]))
                {
                    dr[i] = Regex.Replace(dr[i].ToString(), @"<(.|\n)*?>", string.Empty);
                    dr[i] = HttpUtility.HtmlDecode(dr[i].ToString());                   
                }
            }
        }
    }

J'ai eu besoin de ça pour exporter des données infestées d'HTML (via FCKEditor) dans un fichier CSV.

Sources : Vandamme & MSDN

samedi, juillet 21 2007

Excel et les formats de date récupérés avec C# .NET

Dans une classe servant à lire des fichiers Excel, on utilise souvent la méthode :

Excel._WorkSheet.get_Rang(Object cell1 Object cell2)

provenant des API de Excel pour récupérer un tableau des valeurs des cellules se trouvant dans une plage entre deux cellules de début et de fin. Dans la classe gérant l'API d'Excel, la méthode correspond souvent à ceci :

public string[] Excel_GetRange(string range)
{
    Excel.Range workingRangeCells =
    this._excelWorksheet.get_Range(range, Type.Missing);
    workingRangeCells.Select();
    System.Array array =
    (System.Array)workingRangeCells.Cells.Value2;
    string[] arrayS = this.ConvertToStringArray(array);
    return arrayS;
}

Lorsqu'on récupère la valeur d'une cellule au format date, elle est quelques fois dans un format standard peu éloquent, du genre "39326" pour une date "01/09/2007". En fait c'est la cellule d'Excel qui est au format Date, mais la valeur stockée n'est pas une date mais un entier. Cet entier est un nombre de jours : le nombre de jour entre le 30/12/1899 et la date récupérée dans Excel. Une première solution consiste à ré-écrire la méthode GetRange(), comme proposé ici. Une autre méthode consiste à faire faire à .NET le calcul rapide de la date réelle, en utilisant DateTime.AddDays();.

// Dans une classe de traitement lisant les valeurs d'Excel :
//datevalueFromExcel est la string récupérée depuis Excel via
DateTime dt = new DateTime(1899, 12, 30).AddDays(
    Convert.ToDouble(datevalueFromExcel));
dispo_date = dt.ToShortDateString();

Hop !

vendredi, juillet 20 2007

C# & Regex : Matcher une date

Valide les dates de type

31/12/2099|||1/1/1900|||10/12/2003

Ne valident pas les dates de type :

05/11/3000|||11/13/2003|||32/04/2030

Bien sûr, le mécanisme convient aussi pour tout langage utilisant les expressions régulières.

// Source du pattern :
// Carlos R. L. Rodrigues chez Regexlib.com
string myRegex =  "(^((((0[1-9])|([1-2][0-9])|(3[0-1]))|([1-9]))\x2F(((0[1-9])|"
+ "(1[0-2]))|([1-9]))\x2F(([0-9]{2})|(((19)|([2]([0]{1})))"
+ "([0-9]{2}))))$)";
Regex pattern = new Regex(myRegex);
if (pattern.IsMatch(myString))
{
   DateTime myDate = Convert.ToDateTime(myString);
}

mardi, juillet 3 2007

Lister les propriétés d'un objet

Lister les propriétés d'un objet en utilisant le concept de Reflection :

using System.Reflection;
 (...)
 Hashtable PropertiesOfMyObject = new Hashtable();
 Type t = myObject.GetType();
 PropertyInfo[] pis = t.GetProperties();
 for (int i=0; i<pis.Length; i++) {
 PropertyInfo pi = (PropertyInfo)pis.GetValue(i);
 PropertiesOfMyObject.Add(pi.Name, pi.GetValue(myObject, new object[]
 {}));
 }

Source : Jon Davis

mercredi, mai 23 2007

Convertir une string en valeur Enum, avec Enum.Parse

En quelques lignes, voici comment Convertir une string en valeur Enum

public enum typeBdd
{
       nothing = 0,
       sqlserver = 1,
       mysql = 2,
       oracle = 3
}

Exemple d'utilisation : Récupérer le paramètre indiquant le type de base de donnée à utiliser pour une application. Ce paramètre peut être renseigné dans la configuration générale d'une application (ici en version .NET 2.0)

typeBdd currentBdd = (typeBdd)Enum.Parse(typeof(typeBdd), Properties.Settings.Default.currentBdd, true);

jeudi, avril 12 2007

Tester le dépassement de capacité en C# .NET

Tester le dépassement de capacité en C# .NET (Erreur de dépassement de limite de taille du tas) :

class Program
{
    public static void Main()
    {
        B b = new B();
    }
}

class A
{
    B _b = new B();
}

class B
{
    A _a = new A();
}

jeudi, octobre 26 2006

ASP.NET : Fermer correctement les process MS Office

Clore correctement les processus lancés pour les objets instanciés via les APIs de Excel.

Excel.Workbook oBook;
 Excel.Worksheet oSheet;
 Excel.Application oExcelApp = new Excel.Application();

 oExcelApp.Visible = False
 oExcelApp.DisplayAlerts = False

 oBook = oExcelApp.Workbooks.Add();
 oBook.Sheets.Add();
 oSheet = oBook.Sheets(0);

 if (oBook != null)
 {
 oBook.Close(true, strTemplate, oRien)
 System.Runtime.InteropServices.Marshal.ReleaseComObject(oBook)
 oBook = null;
 }
 if (oSheet != null)
 {
 System.Runtime.InteropServices.Marshal.ReleaseComObject(oSheet);
 oSheet = null;
 }
 if (oExcelApp != null)
 {
 oExcelApp.Quit();
 System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcelApp);
 oExcelApp = null;
 }

lundi, septembre 25 2006

Caractère aléatoire des tests en .NET

La création et l'utilisation de données de cas de test aléatoires sont des atouts essentiels des tests logiciels. Bien que la plupart des données d'un cas de test soient composées d'entrées spécifiques dans le système testé et de valeurs/états attendus spécifiques, il est généralement souhaitable de soumettre également le système à des tests aléatoires, afin de vérifier si cela provoque une panne ou une exception en générant un grand nombre d'entrées dans l'application.

Suite : http://www.microsoft.com/france/msdn/vcsharp/execution-de-tests.mspx

mardi, avril 4 2006

Comparatif syntaxique de C#, Java et VB.NET

Un comparatif sur les différences de syntaxes entre C# et Java et VB.NET et C#. Simple et efficace. A bookmarker.

Comparatif VB.NET, C# et Java

(Via DNG)

vendredi, mars 10 2006

.../aspnet_client/system_web/1-1-4322/WebUIValidation.js

Symptôme

Lors de l'installation / ré-installation du framework .NET 1.1, les fonctionnalités Javascript des PostBack se mettent à bugger. Message d'erreur dans un MessageBox sous IE, erreur dans la console de Javascript sous Gecko.

Solution :

Ligne de commande DOS :

C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_regiis -c

samedi, novembre 26 2005

Ajax .NET : Frameworks, components

AjaxJe note ici pour mémoire quelques liens autour de AJAX et .NET

La technique :

- L'article technique publié par Jesse James Garrett, co-fondateur d'Active Path, sur son blog en février 2005, et qui semble avoir déclenché le bouzin.

Les Web Frameworks :

Première référence incontournable : Ajax.NET Professional ("the first and free Ajax library for .NET"). Michael Schwarz développe et distribue le framework libre Ajax.NET en deux versions :

Tout ce qu'il faut pour construire ses propres userControls ? la sauce Ajax, avec tutoriels, doc et démos.

Mickael Schwarz anime également le Google group Ajax.NET Professional et son propre devblog : Ajax.NET Professional.

Bitkraft Web Framework : Un autre framework publié par TIGGR en LGPL GNU Lesser Public License. Bien documenté et avec des exemples intéressant, il semble un peu moins abouti que le précédent, mais il donne les outils essentiels pour faire de l'Ajax en .NET.

AJAX Was Here : Un double article sur CodeProject de Bill Pierce [1]

Daniel Zeiss' comparison of AJAX frameworks for ASP.NET : 10 frameworks Ajax pour ASP.NET comparés.

Les Composants Web :

Webui30.componentart.com : Une librairie de composants ASP.NET boostés avec Ajax. Compter 799 $ la licence.

Bonus :

La rubrique .NET d'Ajaxian.com

Un article consacré à AJAX sur A List Appart

The Hows and Whys of Degradable Ajax : un article de l'excellent particletree.com.

L'article qui casse tout : Ajax est déj? obsolète

Notes

[1] Qu'est-ce que c'est mal foutu, MSN Space, quand même...

mercredi, novembre 16 2005

Commenter et documenter son code

JavaScript, HTML, CSS

http://particletree.com/features/successful-strategies-for-commenting-code

C#

http://vincentlaine.developpez.com/tuto/dotnet/comdoc/

E-Learning gratuits pour Visual Studio 2005

https://www.microsoftelearning.com/visualstudio2005/

Attention : (semble ne pas fonctionner correctement avec FireFox...)

.NET : Numéroter les lignes (items) d'un datagrid, compatible avec la pagination des résultats

Pour numéroter les résultats listés dans un datatagrid, la méthode consistant utilisant les propriétés ID ou IDClient de l'objet Item convient si les résultats ne s'affichent que sur une seule page, mais ne convient pas si on utilise la pagination. En effet, l'id de chaque ligne est alors toujours recalculé partir du premier item de chaque page qui est systématiquement remis zéro. La numérotation ne se poursuit donc pas de page en page...

Voici Une solution au problème, permettant de garder une numérotation des résultats dans le datagrid qui est conservée de page en page :

 Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, _
     & ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) 
     Handles DataGrid1.ItemDataBound
 
     If Not (e.Item.DataItem Is Nothing) Then
          Dim L As Label
          Dim S As String
          myLabel = CType(e.Item.Cells(0).FindControl("id_numerotation"), Label)
          myString = CType(e.Item.DataSetIndex + 1, String)
          myLabel.Text = myString
     End If
 
 End Sub

(via aspfr.com)

vendredi, septembre 30 2005

NewWindow3 Event in SP2 : No more pop-windows in your javascript...

(Suite ce billet récent)

When you get a click, the first new window opened in the next 2500 ms is allowed; everything else is blocked. But even this is not foolproof. Windows® XP Service Pack 2 contains a new event, NewWindow3, which adds a parameter that includes flags indicating whether or not mshtml.dll thinks a pop-up window is the result of a user-initiated action. Using that flag would be the optimal solution, once you upgrade to Windows XP Service Pack 2.

Source : MSDN, July 2004

jeudi, septembre 29 2005

Datagrid et dropdownlists dynamiques

(Enfin !) une solution pour des dropdownlists dynamiques dans un datagrid. Valable pour tous les types d'items (mode edit, footer,...).

Lire la suite...

jeudi, septembre 15 2005

Développement en .NET : dix sites incontournables

Indexel.net, dont la newsletter est une pleine de ressources, propose sa petite sélection.

Lire la suite...

lundi, août 22 2005

.NET, encoding &amp; ISO-8859-1

.NET Framework doesn't suppport natively the 8859-1 characters encoding (also known as ISO-Latin1). Just founded a solution and some tips about it.
Le framework .NET 1.1 ne permet pas par défaut de créer un encodage en ISO-Latin1 (ISO 8859-1). Voici une solution et quelques pistes.

Lire la suite...

- page 1 de 3