none
Modifier le nom des colonnes d'un DataGridView

    Question

  • Bonsoir,

    J'ai un datagridView qui prend comme DataSource un DataTable créé en dur. Le problème lorsque j'affiche le grid, j'obtiens des noms de colonnes du DataTable. Comment je pourrais faire pour modifier le nom et dire que le champ pointe sur champ du DataTable.

    Merci
    Tuesday, May 05, 2009 5:22 PM

Answers

All replies

  • Bonjour,

    Si vous laissez la propriété autoGenerateColumns du datagridView à true, les colonnes prendront automatiquement le nom du champ comme titre. il est alors possible de changer le header de la colonne via la propriété HeaderText de la colonne de la manière suivante :

    monDataGridView.Columns("nomDuChamp").HeaderText = "MonTitrePersonnalisé"

    De la même manière, il est également possible de cacher une colonne (je pense à la colonne ID qui est souvent invisible pour l'utilisateur)

    Vous pouvez également mettre la propriété autogenerateColumns à false et ajouter les colonnes vous-même. Tout dépend du nombre de colonnes à afficher.
    Wednesday, May 06, 2009 7:23 AM
  • Bonjour,

    j'ai mis la propriété autoGenerateColumns du datagridView à true, puis j'ai modifié le nom des colonnes. Maintenant je souhaite modifier le type par exemple mettre un bouton. Est ce que c'est possible de faire çà par code ?
    Friday, May 08, 2009 11:53 AM
  • Si vous voulez faire apparaître un bouton dans la colonne, vous devez avant tout savoir que ce type de colonne n'est pas généré automatiquement.

    Le mieux à faire n'est donc pas de modifier le type d'une colonne autogénérée (puisque vous avez laissé la propriété à true cfr précédent post) mais bien d'ajouter une nouvelle colonne que vous paramétrerez pour faire apparaître un bouton.
    Friday, May 08, 2009 12:59 PM
  • J'ai résolu le problème, j'ai laissé la propriété autoGenerateColumns du datagridView à true. Voilà mon code :
    try
                {
                    
                    dataGridView1.DataSource = dt;
                    dataGridView1.AutoGenerateColumns = true;
                    
                    dataGridView1.Columns["idmessage"].Visible= false;
                    dataGridView1.Columns["idforum"].Visible = false;
                    dataGridView1.Columns["sujet"].Visible = false;
                    
                    DataGridViewLinkColumn link = new DataGridViewLinkColumn();
                    link.DisplayIndex = 0;
                    link.DataPropertyName = dt.Columns["sujet"].ColumnName;
                    link.HeaderText = "Sujet";
                    dataGridView1.Columns.Add(link);
                   
                    dataGridView1.Columns["datepublication"].HeaderText = "Date de création";
                    dataGridView1.Columns["auteur"].HeaderText = "Auteur";
                    dataGridView1.Columns["nbreLecteur"].HeaderText = "Nombre de lecteurs";
                    dataGridView1.Columns["nbreReponse"].HeaderText = "Nombre de réponses";
                    //dataGridView1.Refresh();
                    
                  
                }
                catch (Exception E)
                {
                    MessageBox.Show(E.StackTrace);
                }
    Le problème que code s'exécute à chaque fois quand j'appuie sur un bouton. Du coup, le grid crée des nouveaux colonnes après chaque clique. Comment je peux résoudre ça ?

    Merci
    Saturday, May 09, 2009 12:26 PM
  • Le problème que code s'exécute à chaque fois quand j'appuie sur un bouton. Du coup, le grid crée des nouveaux colonnes après chaque clique. Comment je peux résoudre ça ?
    Monday, May 11, 2009 8:52 AM
  • Bonjour,

    Pouvez-vous nous montrer le code de votre bouton ?

    Cordialement
    Gilles TOURREAU - MVP C#
    Saturday, May 16, 2009 4:04 PM
    Moderator
  • Bonjour,

    A partir du bouton j'appelle une fonction qui va initialiser mon grid :

    private void button1_Click(object sender, EventArgs e)
    {

    DataTable dt = this.getMessageNonlus(message);
    this.chargerDataGrid(dt);
    }


    public void chargerDataGrid(DataTable dt)
    {
    try
    {
    //MessageBox.Show(dt.Rows.Count.ToString());

    //dataGridViewMessage.Columns.Clear();
    //dataGridViewMessage.Rows.Clear();

    dataGridViewMessage.DataSource = dt;
    dataGridViewMessage.AutoGenerateColumns = true;

    dataGridViewMessage.Columns["idmessage"].Visible = false;
    dataGridViewMessage.Columns["idforum"].Visible = false;
    dataGridViewMessage.Columns["sujet"].Visible = false;

    DataGridViewLinkColumn link = new DataGridViewLinkColumn();
    link.DisplayIndex = 0;
    link.DataPropertyName = dt.Columns["sujet"].ColumnName;
    link.HeaderText = "Sujet";
    dataGridViewMessage.Columns.Add(link);

    dataGridViewMessage.Columns["datepublication"].HeaderText = "Date de création";
    dataGridViewMessage.Columns["auteur"].HeaderText = "Auteur";
    dataGridViewMessage.Columns["nbreLecteur"].HeaderText = "Nombre de lecteurs";
    dataGridViewMessage.Columns["nbreReponse"].HeaderText = "Nombre de réponses";
    //dataGridView1.Refresh();

    }
    catch (Exception E)
    {
    MessageBox.Show(E.Message);
    }
    }
    Merci
    Sunday, May 17, 2009 12:20 PM
  • Bonjour,

    Il faut executer ces lignes qu'une seule fois (à l'initialisation) :

    dataGridViewMessage.DataSource = dt;
    dataGridViewMessage.AutoGenerateColumns = true;
    Ensuite, il suffit de modifier uniquement le contenu de votre DataTable (dt) via la rexecution d'une requête par exemple.
    .NET se charge de réactualiser automatiquement votre DataGridView.

    Cordialement

    Gilles TOURREAU - MVP C#
    • Marked as answer by ZEMZEMI Amine Monday, May 18, 2009 7:12 PM
    • Unmarked as answer by ZEMZEMI Amine Monday, May 18, 2009 11:07 PM
    Monday, May 18, 2009 8:04 AM
    Moderator
  • Bonjour, j'ai encore un problème avec la source , si le datatable est nulle comment j'affiche mon datagridview :
     DataTable dt = getMessageUser(globalIDCLient);
                    //MessageBox.Show(dt.Rows.Count.ToString());
                    if (dataGridViewMessageEcrit.Columns.Count != 0)
                    {
                        dataGridViewMessageEcrit.ClearSelection();
                        dataGridViewMessageEcrit.Columns.Remove("Visualiser");
                        dataGridViewMessageEcrit.Columns.Remove("Supprimer");
                        dataGridViewMessageEcrit.Columns.Remove("Modifier");
    
                    }
                    if (dt != null)
                    {
                        dataGridViewMessageEcrit.DataSource = dt;
    
                        dataGridViewMessageEcrit.AutoGenerateColumns = true;
    
                        dataGridViewMessageEcrit.Columns["idmessage"].Visible = false;
                        dataGridViewMessageEcrit.Columns["idlogin"].Visible = false;
                        dataGridViewMessageEcrit.Columns["contenu"].Visible = false;
    
                        dataGridViewMessageEcrit.Columns["idforum"].HeaderText = "Forum";
                        dataGridViewMessageEcrit.Columns["datecreation"].HeaderText = "Date de création";
                        dataGridViewMessageEcrit.Columns["sujet"].HeaderText = "Sujet";
    
                        DataGridViewImageColumn visualiser = new DataGridViewImageColumn();
                        visualiser.Image = Bitmap.FromFile(@"C:\Documents and Settings\ZEMZEMI\Mes documents\Visual Studio 2008\Projects\ClientForum\ClientForum\Images\miniloupe.gif");
                        visualiser.DisplayIndex = 5;
                        visualiser.Width = visualiser.Image.Width + 20;
                        visualiser.Name = "Visualiser";
                        //visualiser.HeaderText = "Visualiser";
                        dataGridViewMessageEcrit.Columns.Add(visualiser);
    
                        DataGridViewImageColumn modifier = new DataGridViewImageColumn();
                        modifier.Image = Bitmap.FromFile(@"C:\Documents and Settings\ZEMZEMI\Mes documents\Visual Studio 2008\Projects\ClientForum\ClientForum\Images\EDITITEM.GIF");
                        modifier.DisplayIndex = 6;
                        modifier.Width = modifier.Image.Width + 20;
                        modifier.Name = "Modifier";
                        //modifier.HeaderText = "Modifier";
                        dataGridViewMessageEcrit.Columns.Add(modifier);
    
                        DataGridViewImageColumn supprimer = new DataGridViewImageColumn();
                        supprimer.Image = Bitmap.FromFile(@"C:\Documents and Settings\ZEMZEMI\Mes documents\Visual Studio 2008\Projects\ClientForum\ClientForum\Images\DELITEM.GIF");
                        supprimer.DisplayIndex = 7;
                        supprimer.Width = supprimer.Image.Width + 20;
                        //supprimer.ToolTipText = "Supprimer";
                        supprimer.Name = "Supprimer";
                        //supprimer.HeaderText = "Supprimer";
                        dataGridViewMessageEcrit.Columns.Add(supprimer);
                    }
                    else
                    {
                        dataGridViewMessageEcrit = null;//Ici je veux que le grid n'affiche rien
                    }

    Monday, May 18, 2009 11:11 PM
  • Bonjour,

    Il suffit de mettre :
    dataGridViewMessageEcrit.DataSource = null;
    Cordialement
    Gilles TOURREAU - MVP C#
    Friday, May 22, 2009 9:58 AM
    Moderator
  • Bonjour, mais c'est ce que je fais mais j'ai pas eu le résultat attendu.
    Friday, May 22, 2009 4:46 PM
  • Bonjour,

    C'est à dire ?

    Cordialement
    Gilles TOURREAU - MVP C#
    Sunday, May 31, 2009 7:35 AM
    Moderator