LameGrid

Téléchargez la dernière version de LameGrid (avec projets de démonstration en C# et VB.NET) Dernière révision : 04/05/08 (mise à jour mineure, voir changelog).

Christophe HOLMES

LameGrid : un contrôle de grille freeware pour vos développements en .NET ♪

- Titre : LameGrid

- Auteur : Christophe HOLMES

- Parution : 15 avril 2005

- Mise à jour : 4 mai 2008

- Licence :

Sommaire

- I. Pourquoi LameGrid ?

- II. L'utilisation de LameGrid

- III. Fonctionnalités de base

- IV. Fonctionnalités avancées : Les types

- V. Fonctionnalités avancées : Les Styles

- VI. Support des images

- VII. État actuel de développement

- VIII. Licence

- IX. Remerciements

I - Pourquoi LameGrid ?

Cet article a été publié initialement en début 2005, c'est-à-dire avant l'arrivée du Framework 2.0. De ce fait, avec la sortie du DataGridView et du ListView, les commentaires suivants ne sont plus vraiment d'actualités.

Le framework fournit déjà un composant de grille puissant qui, s'il est orienté base de données, peut parfaitement être utilisé pour présenter et manipuler des données internes. Toutefois l'affichage rapide de quelques données avec un mimimun de présentation ( couleurs, police ) n'est pas simple et demande un investissement en temps non négligeable.

En Win32, Microsoft fournissait l'activeX Flexgrid qui permettait de satisfaire à la plupart des demandes de manière assez intuitive (un coup d'œil à la doc suffisait). Il est toujours possible d'utiliser cet activeX dans vos programmes, mais on perd du coup l'intérêt du .net.

LameGrid a pour ambition de combler ce « vide » et venir en remplacement de la FlexGrid.

II - L'utilisation de LameGrid

Le cahier des charges principal de LameGrid est la simplicité d'utilisation, un maximum de choses paramétrables au niveau de l'IDE, des propriétés et méthodes simples. Le but étant que le contrôle soit aussi simple d'utilisation qu'une ListBox ou autre composant de base.

III - Fonctionnalités de base

Propriétés réglables depuis l'IDE et modifiables dynamiquement depuis le code :

- Couleur par défaut des cellules

CellColor

- Couleur par défaut du texte

ForeColor

- Couleurs par défaut des cellules d'entête

FixedBackColor, FixedForeColor

- Couleur de fond de la grille

BackColor

- Police par défaut des cellules

Font

- Nombre de lignes et de colonnes (entraine un effacement de la grille)

RowsCount, ColsCount

- Rangées d'entêtes lignes et colonnes

FixedRowsCount, FixedColsCount

- Position de la cellule active

CurrenRow, CurrentCol

- Grille en lecture seule ou éditable

Editable

- Curseur de sélection par cellule, ligne, colonne ou sans curseur actif

SelectionMode

- Ascenseurs horizontaux et verticaux désactivables individuellement

ShowScrollBar

- Redimensionnement à la souris des colonnes et lignes

ResizableCells

- Paramétrage du dessin du quadrillage des cellules

GridLines

- Couleur du quadrillage des cellules

GridLinesColor

- Mode d'affichage de la cellule courante (automatique ou manuel)

SelectedColorMode

- Couleur de fond de la cellule courante (mode manuel uniquement)

SelectedBackColor

- Couleur du texte de la cellule courante (mode manuel uniquement)

SelectedForeColor

- Rafraîchissement de l'affichage désactivable ( gain de vitesse sur les grosses opérations )

AutoRedraw

Propriétés uniquement modifiables dynamiquement depuis le code :

- Accès paramètres d'une colonne :

VB : Col( ColIndex )    C# : get_Col( ColIndex )    Delphi : Col[ ColIndex ]

Propriété Colonne

- Réglage de la largeur d'une colonne

Width

Propriété Colonne

- Type de données pour la colonne (texte,numérique ou date)

ValueType

Propriété Colonne

- Formatage des valeurs de la colonne (type numérique ou date)

ValueFormat

- Accès paramètres d'une ligne :

VB : Row( RowIndex )    C# : get_Row( RowIndex )    Delphi : Row[ RowIndex ]

Propriété Ligne

- Réglage de la hauteur d'une ligne

Height

- Accès paramètres d'une cellule :

Cell( RowIndex, ColIndex ) ou C#/Delphi : NomContrôle[ RowIndex, ColIndex ]

Propriété Cellule

- Texte

Text

Propriété Cellule

- Couleur du texte

ForeColor

Propriété Cellule

- Couleur de fond

BackColor

Propriété Cellule

- Couleur d'entête

FixedColor

Propriété Cellule

- Police d'écriture

Font

Propriété Cellule

- Alignement du texte

StringFormat

Propriété Cellule

- Accès à la valeur de la cellule Pluto qu'à sa représentation texte

DirectValue

Méthode Cellule

- Affectation d'un style à la cellule

SetStyle

Méthodes de la grille :

- Ajout dynamique d'une ligne

AddRow ou AddRow ( RowIndex )

- Suppression dynamique d'une ligne

RemoveRow ou RemoveRow ( RowIndex )

- Effacement contenu d'une ligne

ClearRow ( RowIndex, ClearTextOnly )

- Tri d'une colonne ASCII ou numérique par ordre croissant ou décroissant

Sort ( ColIndex, Desc, Numeric )

- Rafraîchissement de la grille (utile si AutoRedraw = false)

Redraw( )

Événements de la grille :

- Cellule cliquée

CellClick ( Row, Col, Header )

- Cellule double-cliquée

CellDoubleClick ( Row, Col, Header )

- Cellule modifiée par l'utilisateur

CellChanged ( Row, Col )

- Changement de cellule active

CellRowColChanged ( LastRow, LastCol )

IV - Fonctionnalités avancées : Les types

Par défaut, LameGrid considère chaque cellule en type String. Cette méthode a l'avantage d'être simple d'emploi et tout à fait satisfaisante dans la plupart des cas. Néanmoins pouvoir spécifier un type à l'ensemble d'une colonne présente plusieurs avantages :

- maîtriser la cohérence des données saisies par l'utilisateur ;
- effectuer un tri conforme (pour les dates en particulier) ;
- rapidité du remplissage pour les types autres que String avec la nouvelle propriété DirectValue (voir plus bas) ;
- réduction de l'occupation mémoire (pour les types numériques notamment).

Pour affecter un type à une colonne, j'ai ajouté la propriété ValueType à la propriété Col.

Grille.Col(0).ValueType = LameGrid.ColValueType.Date

Grille.get_Col(1).ValueType = LameGrid.ColValueType.Numeric;

Une fois la colonne affectée à un type vous avez deux solutions pour accéder au contenu d'une cellule :

- la propriété Text comme précédemment : la valeur String sera transformée dans le type adéquat ;
- la propriété DirectValue : dans ce cas on manipule directement la valeur dans le type de la colonne de destination.

Si le gain en vitesse est conséquent pour les dates et les numériques, vous devez prendre garde d'affecter le même type de valeur que celui spécifié pour la colonne.

Grille(i, 0).DirectValue = Date.Now

Grille[i, 1].DirectValue = Convert.ToDouble(i);

V - Fonctionnalités avancées : Les Styles

Un des intérêts de LameGrid est la facilité avec laquelle on manipule l'apparence d'une cellule (couleur, police, alignement …).

Grille[i, c].BackColor = Color.FromArgb(255, 0, 0);
Grille[i, c].ForeColor = Color.FromArgb(0, 0, 255 );
Grille[i, c].Font = new Font("Arial", 10, FontStyle.Bold);
Grille[i, c].StringFormat = Grille.get_CellFormatType(StringAlignment.Center, StringAlignment.Center);

Toutefois, traiter plusieurs cellules de manière identique, oblige à répéter pour chaque cellule le code de formatage.

J'ai ajouté la notion de style pour deux raisons :

1) Changer l'apparence d'une cellule en une opération

Dim Style As LameGrid.Grid.CellStyle

For i As Integer = 1 To Grille.RowsCount - 1
For c As Integer = 0 To 2
Rvb = (i And 1) * 255
Style = New LameGrid.Grid.CellStyle
Style.BackColor = Color.FromArgb(Rvb, 0, 0)
Style.ForeColor = Color.FromArgb(0, 0, 255 - Rvb)
Style.Font = New Font("Arial", 10, FontStyle.Bold)
Style.StringFormat = Grille.CellFormatType(StringAlignment.Center, StringAlignment.Center)
Grille(i, c).SetStyle(Style)
Next
Next

Le look de la cellule est modifié en un coup.

2) Partager un style entre plusieurs cellules

Dim Style1 As New LameGrid.Grid.CellStyle

Style1.BackColor = Color.FromArgb(0, 0, 0)
Style1.ForeColor = Color.FromArgb(0, 0, 255)
Style1.Font = New Font("Arial", 10, FontStyle.Bold)
Style1.StringFormat = Grille.CellFormatType(StringAlignment.Center, StringAlignment.Center)

For i As Integer = 1 To Grille.RowsCount - 1
For c As Integer = 0 To 2
Grille(i, c).SetStyle(Style1)
Next
Next

Dans ce cas un seul style est utilisé pour un ensemble de cellules :

- gain de vitesse important ;
- gain en mémoire très important (les x cellules vont pointer sur le même style partagé) ;
- la modification du style affecte automatiquement l'ensemble des cellules le partageant.

VI - Support des images

J'ai ajouté la possibilité d'afficher une image dans une cellule. Cette opération se fait grâce à la propriété image d'un style.

Style1.Image = Image.FromFile("d:/temp/Recette.gif");

L'alignement de l'image se fait avec la propriété ImageAlignment.

Style1.ImageAlignment = LameGrid.ImageAlignmentType.Left

VII - État actuel de développement

Le contrôle est achevé par rapport à mes objectifs et besoins initiaux. Je ne pense pas le faire évoluer en dehors de la correction de bug.

Je suis ouvert à toutes propositions et critiques constructives : sherlock@lamesoft.org

VIII - Licence

LameGrid est distribué en Freeware. Vous pouvez donc l'utiliser à votre guise pour vos programmes, j'essaierai d'être réactif pour la correction des bugs éventuels.

Le contrôle LameGrid est fourni en l'état. L'utilisateur utilise LameGrid à ses risques et périls, sans garantie d'aucune sorte de la part de l'auteur. L'auteur n'est responsable d'aucun dommage subi par l'utilisateur pouvant résulter de l'utilisation ou de la distribution du contrôle LameGrid. De la même façon, l'auteur n'est en aucun cas responsable d'une quelconque perte de revenus ou de profit, ou de données, ou de tous dommages directs ou indirects, susceptibles de survenir du fait de l'utilisation du contrôle ou pour la raison que celui-ci serait inopérant, quand bien même l'auteur aurait été averti de la possibilité de tels dommages.LameGrid est gratuit pour une utilisation privée, commerciale ou éducative (incluant les organisations à but non lucratif). L'utilisation du contrôle LameGrid vaut acceptation par l'utilisateur des termes de la licence ci-dessus.

Si vous trouvez ce contrôle utile et si le mécénat vous tente, vous pouvez m'envoyer un chèque cadeau de chez Amazon.fr ou LDLC du montant qu'il vous plaira.

IX - Remerciements

Je tiens à remercier Gelati qui m'a fait le gros du débogage du contrôle sous Delphi 2005. Je remercie également Morpheus et l'équipe de Developpez.com qui m'ont gentiment proposé de m'héberger, ainsi que Ditch pour les corrections.