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 :

Sélection et DataGridView


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 232
    Points : 93
    Points
    93
    Par défaut Sélection et DataGridView
    Bonjour,

    J'affiche actuellement mes données dans un DataGridView.
    Mes données s'affichent correctement, seulement j'aimerai éviter que lorsqu'un utilisateur sélectionne une ligne, celle ci soit bleu et aussi qu'au chargement, la première ligne soit sélectionné automatiquement.

    Peut-on désactivé totalement la sélection ou alors mieux la contrôler sachant que dans ce cas je veux rester sur le mode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    monDGV.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
    monDGV.MultiSelect = false;
    Pour tenter d'avoir au moins la première ligne sélectionnée, j'ai t'enté ces méthodes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                //Methode 1
                monDGV.ClearSelection();
                monDGV.Rows[0].Selected = false;
                //Methode 2
                monDGV.CurrentCell = monDGV.Rows[0].Cells[0];
                monDGV.Rows[0].Selected = false;

    Sinon si vous souhaitez voir le code en entier, le voici :

    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
     
                //Taille DGV
                unDGV_Saisie.Width = 433;
                unDGV_Saisie.Height = 350;
     
                //style colonne
                unDGV_Saisie.ColumnHeadersDefaultCellStyle.Font = new Font(unDGV_Saisie.Font, FontStyle.Bold);
                unDGV_Saisie.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single;
                unDGV_Saisie.CellBorderStyle = DataGridViewCellBorderStyle.Single;
     
                // modifier les colonnes et les lignes
                monDGV.AllowUserToResizeColumns = false;
                monDGV.AllowUserToResizeRows = false;
     
                // couleur de fond
                monDGV.BackgroundColor = Color.White;
     
                // affichage des en-tête de colonnes
                monDGV.ColumnHeadersVisible = true;
                monDGV.Columns[0].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
                monDGV.Columns[1].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
                monDGV.Columns[2].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleLeft;
                monDGV.Columns[3].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
                monDGV.Columns[4].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
                monDGV.Columns[5].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
     
                // couleur des séparations
                monDGV.GridColor = Color.Chocolate;
     
                // interdire les modifs des cellules
                if (monDGV.Name == "unDGV_Saisie")
                { monDGV.ReadOnly = false; }
                else { monDGV.ReadOnly = true; }
     
                // affichage des en-tête de ligne
                monDGV.RowHeadersVisible = true;
     
                // mode de selection des cellules
                monDGV.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
                monDGV.MultiSelect = false;
     
     
                // style des cellules
                monDGV.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomCenter;
                monDGV.Columns[1].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomCenter;
                monDGV.Columns[2].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomLeft;
                monDGV.Columns[3].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                monDGV.Columns[4].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
                monDGV.Columns[5].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomCenter;
                //monDGV.ClearSelection();
                //monDGV.Rows[0].Selected = false;
                monDGV.CurrentCell = monDGV.Rows[0].Cells[0];
                monDGV.Rows[0].Selected = false;
    Merci d'avance pour vos réponses

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    il doit y avoir selectioncolor quelque part, sur le style du datagrid peut etre

    pour la selection, tu peux définir dgv.currentcell
    à null, rien n'est sélectionné, si tu mets une cellule,la ligne devrait être sélectionnée en fullrowselect

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 232
    Points : 93
    Points
    93
    Par défaut
    J'ai testé ce que ta proposition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                // mode de selection des cellules
                monDGV.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
                monDGV.MultiSelect = false;
                monDGV.CurrentCell = null;
    ==> J'ai tous de même toujours ma ligne de sélectionnée

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    c'est parce que lorsque le datagridview prend le focus, il selectionne une ligne

    mettre currentcell à null dans l'event gotfocus fait bien qu'il n'y a pas de ligne sélectionnée à l'affichage du form
    voir si les éventuels effets de bord ne te gênent pas (dans le pire des cas un petit booléen permettra de bricoler )

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 232
    Points : 93
    Points
    93
    Par défaut
    Désolé, j'ai mis un peu de temps avant de tester ta solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
            private void unDGV_Saisie_GotFocus(object sender, EventArgs e)
            { 
                unDGV_Saisie.CurrentCell = null;
            }
    Seulement, cela fait buguer mon app car elle tourne en boucle sans jamais avoir de fin !

  6. #6
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 066
    Points : 4 233
    Points
    4 233
    Par défaut
    sur ta form tu n'as que ce datagrid pas d'autre composant ?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 232
    Points : 93
    Points
    93
    Par défaut
    J'ai juste des labels et un autre DataGridView

  8. #8
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 066
    Points : 4 233
    Points
    4 233
    Par défaut
    tu aurais pas mis cette méthode dans les 2 datagrids ce qui fait qu'il se passe le focus en permanence

  9. #9
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Est-ce que ceci fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    monDGV.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
    monDGV.MultiSelect = false;
    monDGV.CurrentCell = monDGV.Rows.Count==0 ? null : monDGV.Rows[0].Cells[0] ;

  10. #10
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 442
    Points
    4 442
    Par défaut
    bonjour youtpout978
    mais enfin tu devrais lire un peu msdn doc:

    1/marquer 1ere row comme row affiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.DataGridView1.FirstDisplayedScrollingRowIndex = 0;

    seulement j'aimerai éviter que lorsqu'un utilisateur sélectionne une ligne, celle ci soit bleu
    2/passe par le cell template (modele de cellule).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     Color  c= Color.Black;
    		this.DataGridView1.RowsDefaultCellStyle.SelectionBackColor = Color.White
    		DataGridViewCellStyle cell   = new DataGridViewCellStyle();
    		cell.SelectionBackColor = Color.White;
    		cell.SelectionForeColor = Color.Red;
    		this.DataGridView1.RowsDefaultCellStyle = cell;
    Avec ca tu ne vois que le black du forecolor (texte affiche)...
    bon code........

Discussions similaires

  1. [C#2.0]Comment empêcher la sélection dans un DataGridView?
    Par meli0207 dans le forum Windows Forms
    Réponses: 12
    Dernier message: 05/02/2020, 08h41
  2. Comment sélection un ligne dans un DataGridView?
    Par Subkill dans le forum VB.NET
    Réponses: 3
    Dernier message: 16/11/2007, 17h38
  3. Comment forcer la sélection d'une ligne dans un DataGridView
    Par Pizza Royale dans le forum Windows Forms
    Réponses: 5
    Dernier message: 12/06/2007, 12h32
  4. [.NET - C# VS2005] Problème de sélection sur un DataGridView
    Par NeraOne dans le forum Windows Forms
    Réponses: 4
    Dernier message: 11/05/2007, 11h30
  5. [VB.NET] datagridview et sélection
    Par olbi dans le forum Windows Forms
    Réponses: 2
    Dernier message: 03/05/2006, 11h22

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