Comment faire apparaitre un checkBox dans un datagrid apres avoir colorier les c

Signaler
Messages postés
92
Date d'inscription
mercredi 5 juillet 2006
Statut
Membre
Dernière intervention
5 août 2009
-
Messages postés
92
Date d'inscription
mercredi 5 juillet 2006
Statut
Membre
Dernière intervention
5 août 2009
-
Salut a tous
voila j'ai pris la fonction suivante d'une des sources de ce site
elle me permet de colorier les cellules de mon datagrid.
mon probleme est que si j'ai une cellule en checkBox apres que le programme passe sur cette fonction le datagrid maffiche True ou False a la place de ce checkBox.
J'ai pense quil etai preferable denvoyer le bout de code que jutilise afin que vous compreniez mieux.
Par la meme occasion est-ce que vous savez ce que je peux faire pour que ce meme checkBox soi soit en situation cochée ou non cochée mais pas de situation intermediaire
Merci bcp

voila le code :

private

void dataGrid1_Paint(
object sender, System.Windows.Forms.PaintEventArgs e)
{
            //J'ai une collection de datagrid nommes tab et de dataset nommes m_oDataSet

            //Focntion que j'ai ecrite afin de determiner de quel datagrid il s'agit 
            //et je recois un nombre nomme tabNum qui me permet aussi de determner le dataset concerne
            TabNum(sender);

      // perform the basic painting
      base.OnPaint(e);
  
   try
      {

               DataTable oTable = m_oDataSet[ tabNum ].Tables["sandra"];

               if (oTable ==
null)

                        return;

            // iterate the rows of the data set table
               int nRow = 0;

               foreach(DataRow oRow
in oTable.Rows)

               {

                           if (oRow ==
null)

                                        continue;

                     ...
                   
                           //si une ligne conviens a ce que je chercher je colorie chaque case de cette ligne
                           
for(
int ab=0; ab<m_oDataSet[ tabNum ].Tables["sandra"].Columns.Count; ab++)
                          {
                                   PaintCustomCell(e.Graphics, oRow, nRow, ab, Color.Gainsboro);
                           }
                           nRow ++;

              }

             catch(Exception myE)
            {   MessageBox.Show("Problem!!" + myE.ToString());
                 oleDbConnection1.Close();
               }

// Paints the cell.
private
void PaintCustomCell(Graphics oGraphics, DataRow oRow,
int nRow,
int nCol, Color backColor)
{
// get the value at the desired location

      string sValue = oRow.ItemArray.GetValue(nCol).ToString();

      // get the cells rect
      Rectangle rect =
this.tab[tabNum].GetCellBounds(nRow, nCol);      Rectangle rect2 this.tab[tabNum].GetCellBounds(nRow, nCol);      Brush oBrush

null;
      oBrush =
new SolidBrush( backColor);
      oGraphics.FillRectangle(oBrush, rect);
      oBrush.Dispose();

      if( backColor.GetBrightness() >= 0.5)
               oBrush =
new SolidBrush( Color.Black);

      else
               oBrush =
new SolidBrush( Color.White);      oGraphics.DrawString( sValue, dataGrid1.Font, oBrush, rect2);
      oBrush.Dispose();

}

sandra

5 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
86
Salut,

C'est ton code qui dessine le texte au lieu du contrôle :
oGraphics.DrawString( sValue, dataGrid1.Font, oBrush, rect2);

Regarde du côté des méthodes DrawCheckBox et DrawMixedCheckBox de la classe ControlPaint.

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
86
J'ai rater mon second lien : DrawMixedCheckBox

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
92
Date d'inscription
mercredi 5 juillet 2006
Statut
Membre
Dernière intervention
5 août 2009

ces liens sont tres interressant et en effet repondent a ma questions, merci


jai   donc change la fin du code par:


if(sValue=="True" ||  sValue=="False" )
{   ControlPaint.DrawCheckBox(oGraphics, rect2, ButtonState.Checked);   }

else
{        oGraphics.DrawString( sValue, dataGrid1.Font, oBrush, rect2);   }


seulemt jai encore 2 pb,
le premier est que ca maffiche toujours en checked et je nai pas trouve dans les sites comment faire pour lafficher si le resultat est false, de plus meme si je viens a cocher la case ca ne change rien
le second pb est que le 'Font' n'est pas le bon, comment je peux faire pour ladapter avec celui de la page??

je te remercie bcp pour tes reponses en tout cas

sandra
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
86
Déjà à ta place je remonterais en début de fonction, c'est inutile de convertir le booléen en string comme tu vas t'en servir sous forme de checkbox, ce qui entre autre te permettra d'utiliser la bonne valeur pour le paramètre d'état dans l'appel de la méthode DrawCheckBox (ButtonState.Checked...).
Pour le restant, si tu doit aussi te servir du mode d'édition tu vas aussi devoir le gérer, il doit y avoir quelques tutos sur le sujet sur le net.

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
92
Date d'inscription
mercredi 5 juillet 2006
Statut
Membre
Dernière intervention
5 août 2009

Resalut Coq,
je suis encore une fois vraiment desolee de t'embeter avec mes questions mais je tavoue que jai chercher sur le site, sur google et sur le site de microsoft mais je nai trouve aucun exemple pour colorier des checkBoxs et garder le meme 'Font'.
jai limpression que la fonction DrawCheckBox ne fais que dessiner un checkbox, mais elle ne prend pas en compte les valeurs et ne me permet pas de colorier une cellule checkbox, je sais pas peut etre que je me trompe mais en tou cas jai vraiment essayer, c;est pourquoi je me retourne vers toi, peut etre que tu pourrai me guider.
N'y a t'il pas une fonction equivalente pour les checkBox qui ressemblerai a ca?
  oGraphics.DrawString( sValue, dataGrid1.Font, oBrush, rect2);

De plus tu mavais conseiller de remonter en debut de fonction mais ca ne me change rien de convertir le bool en string ou bien de ne pas le faire, puisque je ne minterresse qua sa valeur, donc ensuite je suis perdue, surtout que jai du mal avec les fonction paint......

sandra