z_san
Messages postés80Date d'inscriptionjeudi 2 février 2006StatutMembreDernière intervention24 mai 2007
-
23 mai 2007 à 07:41
z_san
Messages postés80Date d'inscriptionjeudi 2 février 2006StatutMembreDernière intervention24 mai 2007
-
24 mai 2007 à 09:46
Bonjour
Je vous explique mon problème.
J'ai une forme qui contien un tab control, chaque onglet représente un jour de la semaine, dans cet onglet on retrouve un datagridview qui contient des horaires, une colonne "Début", une colonne "Fin" et une colonne contenant un dessin représentant un intervale de temps (un rectangle avec dessiné dedans l'intervale par de petit rectangles coloré "un time barre" si vou préférez.
Quand le DataGridView contient qu'un seul horaire pas de soucis le timeBarre représente bien l'horaire indiqué.
Par contre quand il en contient plusieurs la il affiche dans la cellule concerné de chaque ligne tout les horaires de chaque ligne (une sorte de résumé de chaque chaque ligne)
Pour faire ce dessin j'ai utilsé l'événement CellPainting dont voici le code :
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
Color color1 = new Color();
Color color2 = new Color();
color1 = Color.Orange;
color2 = Color.OrangeRed;
if (this.dgvSelected.Columns[ColumnName].Index ==
e.ColumnIndex && e.RowIndex >= 0)
{
using (Brush gridBrush = new SolidBrush(Color.Black),
backColorBrush = new SolidBrush(e.CellStyle.BackColor))
{
using (Pen gridLinePen = new Pen(gridBrush))
{
// Efface la cellule.
e.Graphics.FillRectangle(backColorBrush, e.CellBounds);
// Dessine le rectangle dans la cellule.
e.Graphics.DrawRectangle(Pens.Black, newRect);
//Pour Chaques lignes de dgvSelected
foreach (DataGridViewRow r in dgvSelected.Rows)
{
x0 = newRect.X;
y0 = newRect.Y;
// Si les champs Debut et Fin sont pas vides
if ((r.Cells[ColumnDebut].Value != null) &&
(r.Cells[ColumnFin].Value != null))
{
debut = (DateTime)r.Cells[ColumnDebut].Value;
fin = (DateTime)r.Cells[ColumnFin].Value;
//On définit les point de débuts
ptDebut.X = (System.Convert.ToInt16(debut.Hour) * 60
+ System.Convert.ToInt16(debut.Minute)) / 6 + x0;
ptDebut.Y = y0 + 1;
//Définition des points de fin
ptFin.X = (System.Convert.ToInt16(fin.Hour) * 60 +
System.Convert.ToInt16(fin.Minute)) / 6 + x0;
ptFin.Y = y0 + 1;
//On définit la largeur et la hauteur du rectangle à
remplir représentant l'écart Horaire
_width = ptFin.X - ptDebut.X;
_height = newRect.Height;
if (_width > 0)
{
if ((color1 == Color.DarkRed)
&& (color2 == Color.Red))
{
color1 = Color.Orange;
color2 = Color.OrangeRed;
Rectangle rectTemps = new
Rectangle(ptDebut.X, ptDebut.Y, _width,
_height);
LinearGradientBrush gradientBrush = new
LinearGradientBrush(rectTemps, color1,
color2, LinearGradientMode.Vertical);