Aller au contenu

[.NET CF] Modifier les en-têtes d'une DataGrid


PoP

Messages recommandés

J'ai une appli écrite en C# pour le framwork .NET Compact Framework tournant sur un smartphone sous Windows Mobile 5. Dans cette appli j'ai un composant DataGrid pour lequel je souhaite implémenter le comportement suivant : quand l'utilisateur "click" avec son stylet sur l'entête d'une colonne, je veux que l'entête de cette colonne (et uniquement celle-ci) change de couleur.

Pour le moment je n'arrive qu'à changer la couleur de tous les en-tête d'un coup. Voici comment je fais:

private void dataGrid1_MouseDown(object o, MouseEventArgs mea)
   {
       DataGrid.HitTestInfo hitTest;

       if (mea.Button == MouseButtons.Left)
       {
           dataGrid1 = (DataGrid)o;

           // On fait un hittest pour savoir ou l'on a pointe
           hitTest = dataGrid1.HitTest(mea.X, mea.Y);

           // Si le hittest est sur un header de colonne, on continue
           if (hitTest.Type == DataGrid.HitTestType.ColumnHeader)
           {
               // on recupere le nom de la colonne pour l'operation de tri plus bas
               string columnName = ((DataTable)((DataView)dataGrid1.DataSource).Table).Columns[hitTest.Column].ColumnName;

               if (dataGrid1.HeaderBackColor != SystemColors.ControlDark)
               // on veut foncer la couleur des colonnes
               {
                   dataGrid1.HeaderBackColor = SystemColors.ControlDark;
               }
               // on veut remettre la couleur par defaut
               else
               {
                   dataGrid1.HeaderBackColor = defaultColor;
               }
   (...)

Le composant en question est un System.Windows.Forms.DataGrid. Je suis tout à fait enclin à utiliser un composant OpenNETCF si celui-ci permet de faire ce que je souhaite.

Lien à poster

As tu essayé de bounder colonne par colonne et en définissant un template pour chaque ?

Ce qui permettrais d'éviter que ton header coloré passe pour toute les autres.

Étant donné que les colonnes d'un datagrid sont défini par un index, tu peux esayer un truc du genre DataGrid.Columns[index].HeaderText

Cet exemple modifie le texte du header bien sur.

Lien à poster
×
×
  • Créer...