LameGrid
Date de publication : 15/04/2005 , Date de mise à jour : 04/05/2008
Par
Christophe HOLMES (kikos31.developpez.com)
LameGrid : un contrôle de grille freeware pour vos développement en .NET
 |
Développé en Framework 1.1 (utilisable avec Visual Studio 2003 et supérieur).
|
1. Pourquoi LameGrid ?
2. L'utilisation de LameGrid
3. Fonctionnalités de base
4. Fonctionnalités avancées : Les types
5. Fonctionnalités avancées : Les Styles
6. Support des images
7. Etat actuel de développement
8. Licence
9. Remerciements
1. Pourquoi LameGrid ?
 |
Cet article à é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 vraiments 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égligable.
En Win32, Microsoft fournissait l'activeX Flexgrid qui permettait de satisfaire à la plupart des demandes de manière assez intuitive (un coup d'oeil à la doc suffisait). Il est toujours possible d'utiliser cet activeX dans vos programmes mais on perd du coup l'intêret du .net.
LameGrid a pour ambition de combler ce "vide" et venir en remplacement de la FlexGrid.
2. 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.
3. 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 plutot qu'a 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( ) |
Evénements de la grille :
| - Celulle cliquée |
CellClick ( Row, Col, Header ) |
| - Celulle double-cliquée |
CellDoubleClick ( Row, Col, Header ) |
| - Celulle modifiée par l'utilisateur |
CellChanged ( Row, Col ) |
| - Changement de celulle active |
CellRowColChanged ( LastRow, LastCol ) |
4. 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 2 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);
|
5. Fonctionnalités avancées : Les Styles
Un des interêt 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 2 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 cellule :
- Gain de vitesse conséquent
- Gain en mémoire très conséquent (les x cellules vont pointer sur le même style partagé)
- La modification du style affecte automatiquement l'ensemble des cellules le partageant
6. Support des images
J'ai ajouté la possibilité d'afficher une image dans une cellule. Cette opération se fait grace à 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
|
7. Etat 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.
8. 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.
9. Remerciements
Je tiens à remercier Gelati qui m'a fait le gros du debuggage 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.

