IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Opérations sur colonnes d'un datagridview maison


Sujet :

C#

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 259
    Par défaut Opérations sur colonnes d'un datagridview maison
    Bonjour,

    j'ai commencé à me faire un petit datagridview customisé.
    J'ai fait quelques petites choses sur le OnCellPainting, ça, ça marche.
    Mais je voulais me faire une méthode pour faire disparaitre le glyph du sort qui apparait à chaque clic d'en tete de colonne (j'ai pas trouvé un moyen pour l'erradiquer définitivement à la création du datagridview).
    Alors je procedais a peu pres comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private void liste_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
            {for (int j = 0; j < liste.Columns.Counth; j++)
                { liste.Columns[j].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.None; }
            }
    Et ça , ça marche.
    Mais je voudrais donc alors plutot quelque chose du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
           public void ColonnesSortMode(string direction,int debut,int fin)
            {
                for (int j = debut; j < fin; debut++)
                {
                    switch (direction)
                    {
                        case "NONE":
     
     
                            liste_dtgv.Columns[j].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.None;
                            break;
                        case "ASC":
                            liste_dtgv.Columns[j].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.Ascending;
                            break;
                        case "DESC":
                            liste_dtgv.Columns[j].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.Descending;
                            break;
                    }
                }
     
            }
    Ci dessus ce serait une méthode de la classe MonDataGridView
    et faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private void liste_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
    liste.ColonnesSortMode("NONE", 0, liste.Columns.Count);
            }
    Dans le but de pouvoir me resservir de mon pti datagridview dans un autre projet.
    Mais le soucis c'est que j'ai un message d'erreur d'index hors limite dans le for de ma méthode perso.
    Je ne sais pas trop comment faire donc pour manipuler les colonnes de mon datagridview (liste) dérivé de ma classe par le datagridview pere (liste_dtgv)...

    Je ne sais pas si je suis tres clair...

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Ton for est faux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (int j = debut; j < fin; debut++)
    Cpa plutot

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (int j = debut; j < fin; j++)
    Ceci dit je vois pas pourquoi tu as un index hors limite, mais essaye de le corriger quand même.

    Ensuite le switch dans le for bof bof niveau perf (ton switch est révalué à chaque boucle), j'aurais plutot fait des for dans le switch.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 259
    Par défaut
    Ah oui c'est vrai pour le switch
    Et pour la boucle for il y avait un probleme aussi...corrigé.
    mais ça ne résoud pas mon soucis

    j'ai ce message à l'arrive dans la boucle for:
    L'index était hors limites. Il ne doit pas être négatif et doit être inférieur à la taille de la collection.

    J'ai mis 2 captures d'écran.

    Au niveau code ça me donne ça pour ma classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
        public partial class MonDataGridView : DataGridView
        {
            public bool[] _TableauColumnHeaderClicked;
     
            public MonDataGridView()
            {
                InitializeComponent();
            }
            public MonDataGridView(IContainer container)
            {
                container.Add(this);
     
                InitializeComponent();
            }
     
            #region propriétés
            public bool[] TableauColumnHeaderClicked
            {
                get {return _TableauColumnHeaderClicked; }
                set { _TableauColumnHeaderClicked = value; }
            }
            #endregion
     
            public void ColonnesSortMode(string direction,int debut,int fin)
            {
                    switch (direction)
                    {
                        case "NONE":
                            for (int j = debut; j < fin; j++)
                            {
                            liste_dtgv.Columns[j].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.None;
                            }
                            break;
                        case "ASC":
                            for (int j = debut; j < fin; j++)
                            {
                            liste_dtgv.Columns[j].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.Ascending;
                            }
                            break;
                        case "DESC":
                            for (int j = debut; j < fin; j++)
                            {
                            liste_dtgv.Columns[j].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.Descending;
                            }
                            break;
                    }
     
            }
     
     
     
          protected override void OnColumnHeaderMouseClick(DataGridViewCellMouseEventArgs e)
            {
                base.OnColumnHeaderMouseClick(e);
                _TableauColumnHeaderClicked[e.ColumnIndex] = true;
     
     
            }
     
          protected override void OnCellPainting(System.Windows.Forms.DataGridViewCellPaintingEventArgs e)
            {
                base.OnCellPainting(e);
                if ((e.RowIndex == -1) && (e.ColumnIndex >= 0) && (_TableauColumnHeaderClicked[e.ColumnIndex]))
                {
                    try
                    {
                        Icon ico = Properties.Resources.Flechebas;
                        Rectangle rctg = new Rectangle();
                        rctg.X = e.CellBounds.X + e.CellBounds.Width - 32; //tjrs sur la droite de la cellule
                        rctg.Y = e.CellBounds.Y + 4;
                        rctg.Size = ico.Size;
                        e.Paint(e.CellBounds, DataGridViewPaintParts.All & ~DataGridViewPaintParts.ContentForeground);
                        e.Graphics.DrawIcon(ico, rctg);
                        //e.Graphics.DrawIcon(ico, e.CellBounds);
                        e.Handled = true;
                        //liste.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.None;
                    }
                    catch (Exception ex) { MessageBox.Show(ex.ToString()); }
     
     
                }
                else { e.Handled = false; }
            }
     
     
        }
    J'ai dans ma classe form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            this.liste = new MonDataGridView();[...]
            public MonDataGridView liste;
    Images attachées Images attachées   

  4. #4
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    j vaut combien quand ça merdouille ?

  5. #5
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    j vaut combien quand ça merdouille ?
    Combien vaut liste.Columns.Count ?

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 259
    Par défaut
    En fait mon liste_dtgv.Columns.Count vaut 0 et j vaut 0 aussi.

    Mais mon liste.Columns.Count vaut 11



    liste_dtgv est mon datagridview de ma classe perso.

    Et liste est le datagridview créé a partir de liste_dtgv...

    En fait le program bloque dans le fichier MonDataGridView.cs ou est défini ma classe MonDataGridView. Dont le nom du datagridview est liste_dtgv.

    Etant débutant en C# je ne sais pas tres bien comment m'exprimer pour exposer mon soucis.
    Je pense que liste_dtgv != liste . Il en a hérité des propriétés mais pas du statut actuel de 'liste' dans le programme (nbre de colonnes, de row etc..)

  7. #7
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par Yogy Voir le message
    liste_dtgv est mon datagridview de ma classe perso.

    Et liste est le datagridview créé a partir de liste_dtgv...
    Comprends pas.

    Dans le code que tu m'as passé je vois pas liste_dtgv

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 259
    Par défaut
    Sisi dans mon 2eme post, j'ai mis ma classe MonDataGridView :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
        public partial class MonDataGridView : DataGridView
        {
            public bool[] _TableauColumnHeaderClicked;
     
            public MonDataGridView()
            {
                InitializeComponent();
            }
            public MonDataGridView(IContainer container)
            {
                container.Add(this);
     
                InitializeComponent();
            }
     
            #region propriétés
            public bool[] TableauColumnHeaderClicked
            {
                get {return _TableauColumnHeaderClicked; }
                set { _TableauColumnHeaderClicked = value; }
            }
            #endregion
     
            public void ColonnesSortMode(string direction,int debut,int fin)
            {
                    switch (direction)
                    {
                        case "NONE":
                            for (int j = debut; j < fin; j++)
                            {
                            liste_dtgv.Columns[j].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.None;
                            }
                            break;
                        case "ASC":
                            for (int j = debut; j < fin; j++)
                            {
                            liste_dtgv.Columns[j].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.Ascending;
                            }
                            break;
                        case "DESC":
                            for (int j = debut; j < fin; j++)
                            {
                            liste_dtgv.Columns[j].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.Descending;
                            }
                            break;
                    }
     
            }
     
     
     
          protected override void OnColumnHeaderMouseClick(DataGridViewCellMouseEventArgs e)
            {
                base.OnColumnHeaderMouseClick(e);
                _TableauColumnHeaderClicked[e.ColumnIndex] = true;
     
     
            }
     
          protected override void OnCellPainting(System.Windows.Forms.DataGridViewCellPaintingEventArgs e)
            {
                base.OnCellPainting(e);
                if ((e.RowIndex == -1) && (e.ColumnIndex >= 0) && (_TableauColumnHeaderClicked[e.ColumnIndex]))
                {
                    try
                    {
                        Icon ico = Properties.Resources.Flechebas;
                        Rectangle rctg = new Rectangle();
                        rctg.X = e.CellBounds.X + e.CellBounds.Width - 32; //tjrs sur la droite de la cellule
                        rctg.Y = e.CellBounds.Y + 4;
                        rctg.Size = ico.Size;
                        e.Paint(e.CellBounds, DataGridViewPaintParts.All & ~DataGridViewPaintParts.ContentForeground);
                        e.Graphics.DrawIcon(ico, rctg);
                        //e.Graphics.DrawIcon(ico, e.CellBounds);
                        e.Handled = true;
                        //liste.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.None;
                    }
                    catch (Exception ex) { MessageBox.Show(ex.ToString()); }
     
     
                }
                else { e.Handled = false; }
            }
     
     
        }
    Mon datagridview appelé liste est 'dérivé' ou 'fils' de liste_dtgv.
    Et j'utilise la méthode ColonnesSortMode pour effacer le petit triangle indiquant le sens du tri à chaque clic sur les en tetes de colonne de liste.
    Je crois voir pourquoi ça marche pas. Effectivement liste et liste_dtgv n'ont qu'un lien de parenté. mais je voudrais pouvoir me faire une collection de commande pour mes futurs datagridview sans avoir à tout réécrire à chaque fois..

    Merci pour le temps passé.

  9. #9
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Oui je vois l'utilisation mais pas la déclaration. Dans l'autre bout de la classe partielle ?

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 259
    Par défaut
    Ah oui désolé , voici l'autre bout de la classe partielle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
      partial class MonDataGridView
        {
            /// <summary>
            /// Variable nécessaire au concepteur.
            /// </summary>
            private System.ComponentModel.IContainer components = null;
     
            /// <summary> 
            /// Nettoyage des ressources utilisées.
            /// </summary>
            /// <param name="disposing">true si les ressources managées doivent être supprimées ; sinon, false.</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
     
            #region Code généré par le Concepteur de composants
     
            /// <summary>
            /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
            /// le contenu de cette méthode avec l'éditeur de code.
            /// </summary>
            private void InitializeComponent()
            {
                this.liste_dtgv = new System.Windows.Forms.DataGridView();
                ((System.ComponentModel.ISupportInitialize)(this.liste_dtgv)).BeginInit();
                // 
                // liste_dtgv
                // 
                this.liste_dtgv.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
                this.liste_dtgv.Location = new System.Drawing.Point(0, 0);
                this.liste_dtgv.Name = "liste_dtgv";
                this.liste_dtgv.RowTemplate.Height = 24;
                this.liste_dtgv.Size = new System.Drawing.Size(240, 150);
                this.liste_dtgv.TabIndex = 0;
                ((System.ComponentModel.ISupportInitialize)(this.liste_dtgv)).EndInit();
     
            }
     
            #endregion
     
            private System.Windows.Forms.DataGridView liste_dtgv;
        }

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 259
    Par défaut
    Je fais un 2eme post pour que ça soit plus clair.
    Et là c'est la création de ma Form.
    j'ai effacé les autres controles.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    using System.Drawing.Drawing2D;
    using System.Drawing;
    
    namespace WindowsFormsApplication1
    {
        partial class Ficart
        {
            /// <summary>
            /// Variable nécessaire au concepteur.
            /// </summary>
            private System.ComponentModel.IContainer components = null;
    
            /// <summary>
            /// Nettoyage des ressources utilisées.
            /// </summary>
            /// <param name="disposing">true si les ressources managées doivent être supprimées ; sinon, false.</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
    
            #region Code généré par le Concepteur Windows Form
    
            /// <summary>
            /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
            /// le contenu de cette méthode avec l'éditeur de code.
            /// </summary>
            private void InitializeComponent()
            {
                this.components = new System.ComponentModel.Container();
                System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Ficart));
                 this.liste = new MonDataGridView();
                ((System.ComponentModel.ISupportInitialize)(this.liste)).BeginInit();
                this.SuspendLayout();
                // 
                // liste
                // 
                this.liste.AllowUserToAddRows = false;
                this.liste.AllowUserToDeleteRows = false;
                this.liste.AllowUserToOrderColumns = true;
                this.liste.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                            | System.Windows.Forms.AnchorStyles.Left)
                            | System.Windows.Forms.AnchorStyles.Right)));
                this.liste.ColumnHeadersHeight = 40;
                this.liste.EnableHeadersVisualStyles = false;
                this.liste.Location = new System.Drawing.Point(9, 74);
                this.liste.Name = "liste";
                this.liste.ReadOnly = true;
                this.liste.RowTemplate.Height = 24;
                this.liste.Size = new System.Drawing.Size(1245, 381);
                this.liste.TabIndex = 0;
                this.liste.ColumnHeaderMouseClick += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.liste_ColumnHeaderMouseClick);
                 // 
                // Ficart
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(1266, 467);
                this.Controls.Add(this.liste);
                this.Name = "Ficart";
                this.Text = "Ficart";
    
                ((System.ComponentModel.ISupportInitialize)(this.liste)).EndInit();
                this.ResumeLayout(false);
                this.PerformLayout();
    
            }
    
            #endregion
    
            public MonDataGridView liste;
    
        }
    }
    Et la méthode lors du clic sur une en tete de colonne de 'liste' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    private void liste_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
            {
                #region modification du tri
                //On initialise le tri de chacune des colonnes en type 'programmable' à l'aide d'une boucle for
                int k = 0;
               // for (int j = 0; j < liste.Columns.Count; j++)
               // { liste.Columns[j].SortMode = DataGridViewColumnSortMode.Programmatic;}
                #endregion
    
                liste.ColonnesSortMode("NONE", 1, liste.Columns.Count);
    
                //for (int j = 0; j < liste.Columns.Count; j++)
                //{ liste.Columns[j].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.None; }
                
            }
    Si je decommente le code en vert ça marche.
    Mais ce que je voudrais faire c'est justement 'integrer' ce genre de fonction dans ma classe MonDataGridView afin de plus avoir a réécrire ce bot de code (qui peut etre plus ou moijns grand) et d'en comprendre le principe car je voudrais en faire d'autres.

  12. #12
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Comment tu l'as créé ton MonDataGridView ?

    Je comprends pas pourquoi un MonDataGridView possède un DataGridView puisqu'il est lui même un DataGridView grâce à l'héritage.

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 259
    Par défaut
    Ah, heu bah, j'ai fait clic droit sur mon projet dans VS 2008 pro, ajouter nouvel élément, choisi 'classe component'.
    Comme il m'est demandé je dépose un controle que je veux, je choisi le datagridview et voici le code généré :
    2 partial class :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    namespace WindowsFormsApplication1
    {
        partial class Component1
        {
            /// <summary>
            /// Variable nécessaire au concepteur.
            /// </summary>
            private System.ComponentModel.IContainer components = null;
     
            /// <summary> 
            /// Nettoyage des ressources utilisées.
            /// </summary>
            /// <param name="disposing">true si les ressources managées doivent être supprimées ; sinon, false.</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
     
            #region Code généré par le Concepteur de composants
     
            /// <summary>
            /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
            /// le contenu de cette méthode avec l'éditeur de code.
            /// </summary>
            private void InitializeComponent()
            {
                this.dataGridView1 = new System.Windows.Forms.DataGridView();
                ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
                // 
                // dataGridView1
                // 
                this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
                this.dataGridView1.Location = new System.Drawing.Point(0, 0);
                this.dataGridView1.Name = "dataGridView1";
                this.dataGridView1.Size = new System.Drawing.Size(240, 150);
                this.dataGridView1.TabIndex = 0;
                ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
     
            }
     
            #endregion
     
            private System.Windows.Forms.DataGridView dataGridView1;
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Diagnostics;
    using System.Linq;
    using System.Text;
     
    namespace WindowsFormsApplication1
    {
        public partial class Component1 : Component
        {
            public Component1()
            {
                InitializeComponent();
            }
     
            public Component1(IContainer container)
            {
                container.Add(this);
     
                InitializeComponent();
            }
        }
    }
    Moi j'ai rajouté dans la 2eme classe partielle, using System.Windows.Forms
    et j'ai renomé le public partial class Component1 : Component
    en public partial class MonDataGridView : DataGridView

    Je crois voir ce que tu veux dire avec ton dernier message...
    Mais comment je peux faire pour faire ce que je veux alors ?
    Images attachées Images attachées  

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 259
    Par défaut
    J'ai réécris ma classe du coup, sans utiliser VS que je dois pas bien utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;
    using System.Text;
    using System.Drawing;
     
    namespace WindowsFormsApplication1
    {
        public class MonDataGridView : DataGridView
        {
            public bool[] _TableauColumnHeaderClicked;
     
            public MonDataGridView()
            {
            }
     
     
            #region propriétés
            public bool[] TableauColumnHeaderClicked
            {
                get {return _TableauColumnHeaderClicked; }
                set { _TableauColumnHeaderClicked = value; }
            }
            #endregion
     
           /* public void ColonnesSortMode(string direction,int debut,int fin)
            {
                    switch (direction)
                    {
                        case "NONE":
                            for (int j = debut; j < fin; j++)
                            {
                            liste_dtgv.Columns[j].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.None;
                            }
                            break;
                        case "ASC":
                            for (int j = debut; j < fin; j++)
                            {
                            liste_dtgv.Columns[j].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.Ascending;
                            }
                            break;
                        case "DESC":
                            for (int j = debut; j < fin; j++)
                            {
                            liste_dtgv.Columns[j].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.Descending;
                            }
                            break;
                    }
     
            }*/
     
     
          protected override void OnColumnHeaderMouseClick(DataGridViewCellMouseEventArgs e)
            {
                base.OnColumnHeaderMouseClick(e);
                _TableauColumnHeaderClicked[e.ColumnIndex] = true;
     
     
            }
     
            #region cell painting
          protected override void OnCellPainting(System.Windows.Forms.DataGridViewCellPaintingEventArgs e)
            {
                //CellPainting est appellée à CHAQUE CELLULE du tableau lors de son dessin
                //il faut 'attendre' que la cellule qui est en train d'etre dessinée ou redessinée
                //soit bien celle sur laquelle on a cliquée, les coordonées de cette dernière sont stockées
     
                // on met une condition sur le fait que la cellule doit etre un header de colonne pour eviter de
                //changer une cellule qui par haser aurait le meme nom que la colonne cliquée.
                //il ne faut pas que 2 colonnes aient le meme nom, sinon elle seront changées ttes les 2
     
                base.OnCellPainting(e);
                if ((e.RowIndex == -1) && (e.ColumnIndex >= 0) && (_TableauColumnHeaderClicked[e.ColumnIndex]))
                {
                    try
                    {
                        Icon ico = Properties.Resources.Flechebas;
                        Rectangle rctg = new Rectangle();
                        rctg.X = e.CellBounds.X + e.CellBounds.Width - 32; //tjrs sur la droite de la cellule
                        rctg.Y = e.CellBounds.Y + 4;
                        rctg.Size = ico.Size;
                        e.Paint(e.CellBounds, DataGridViewPaintParts.All & ~DataGridViewPaintParts.ContentForeground);
                        e.Graphics.DrawIcon(ico, rctg);
                        //e.Graphics.DrawIcon(ico, e.CellBounds);
                        e.Handled = true;
                        //liste.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.None;
                    }
                    catch (Exception ex) { MessageBox.Show(ex.ToString()); }
     
     
                }
                else { e.Handled = false; }
            }
     
            #endregion
        }
    }
    Du coup comment je fais avec ma méthode ColonnesSortMode (qui est en commentaire) pour agir directement sur les colonnes.. ? je dois mettre quoi pour avoir acces à : '.Columns[j].HeaderCell.SortGlyphDirection' ?
    Merci en tout cas pour tout !!

  15. #15
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.Columns[j].HeaderCell.SortGlyphDirection

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 259
    Par défaut
    Arf quel benna je fais...
    Tout ça pour qq chose de si simple

    mais un gros merci quand meme pour l'aide !!

    Bon maintenant il faut que je trouve comment mettre une image et du text dans une meme cellule d'un datagridview

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Opérations sur les colonnes d'une matrice
    Par george216 dans le forum MATLAB
    Réponses: 6
    Dernier message: 04/01/2010, 08h08
  2. Réponses: 8
    Dernier message: 25/05/2009, 13h40
  3. [DataGridView] trim() sur colonnes venu de la base.
    Par djskyz dans le forum Windows Forms
    Réponses: 0
    Dernier message: 05/12/2008, 10h02
  4. Opération complexe sur colonne varchar
    Par CinePhil dans le forum Requêtes
    Réponses: 5
    Dernier message: 17/10/2008, 14h51
  5. Réponses: 4
    Dernier message: 17/04/2008, 13h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo