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#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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

+ 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