Image dans DataGridView [Résolu]

Le grand Jisay 100 Messages postés mardi 8 mai 2007Date d'inscription 18 février 2011 Dernière intervention - 28 déc. 2007 à 13:18 - Dernière réponse : Le grand Jisay 100 Messages postés mardi 8 mai 2007Date d'inscription 18 février 2011 Dernière intervention
- 28 déc. 2007 à 14:24
Bonjour tout le monde,


Voici mon problème, j'ai une application qui gère un stock de CD. J'ai
un datagridview qui contient les colonnes avec le nom de l'artiste, le
nom de l'album et la quantité restante en stock.

J'ai ajouté une colonne de type DataGridViewImageColumn pour pouvoir
afficher une image. Cette image doit être différente si le stock est
supérieur à 0 ou si il est égal à 0. Donc si la valuer dans la colonne
"En Stock" est de 0 alors je mets une petite image avec une croix.


J'ai trouvé un petit quelque chose sur la MSDN : http://msdn2.microsoft.com/fr-fr/library/2ab8kd75(VS.80).aspx

Mais cette source m'affiche la même image partout dans la colonne et j'ai besoin d'images différentes.


J'ai aussi trouvé sur le forum une piste : http://www.csharpfr.com/infomsg_DATAGRIDVIEW-PICTUREBOX_990638.aspx

Mais alors si je fais comme cela, j'ai une erreur assez impressionnante
qui s'affiche. J'ai une erreur pour chaque ligne ou je mets une image
et l'image s'affiche sur la dernière ligne du DataGridView (où il n'y a
pas d'enregistrements).


Je vous donne le code que j'ai pour le moment :


        //je remplis mon DataGridView quand je sélectionne un nom d'artiste dans une combobox


        private void toolStripComboBox1_SelectedIndexChanged(object sender, EventArgs e)

        {

            this.cdsDataSet1.Clear();

            this.sqlDataAdapter1.SelectCommand.Parameters["@nom_artiste"].Value = this.toolStripComboBox1.Text;

            this.sqlDataAdapter1.Fill(cdsDataSet1);

            this.dataGridView1.Visible = true;


            // Ceci c'est le code présent sur la MSDN


            /*Icon treeIcon = new Icon(@".\1364.ico");

            DataGridViewImageColumn iconColumn = new DataGridViewImageColumn();

            iconColumn.Image = treeIcon.ToBitmap();

            iconColumn.Name = "Tree";

            iconColumn.HeaderText = "Nice tree";

            dataGridView1.Columns.Insert(3, iconColumn);*/


            icone();

        }


        // fonction pour le remplissage


        public void icone()

        {


            // Code que j'ai trouvé sur le forum (génère une grosse erreur)

            foreach (DataGridViewRow line in this.dataGridView1.Rows)

            {

                //le try ne sert a rien => toujours une erreur et je ne gère pas le fait que le stock soit plus grand que 0

                // ou bien égal à 0...

                try

                {

                    line.Cells[3].Value = Bitmap.FromFile(@".\croix.jpg");

                }

                catch (System.Exception ex)

                {

                    MessageBox.Show(ex.Message);

                }

            }

        }


Voila, je me permet de vous demander votre aide, je suis resté bloqué sur ce petit problème pendant 2heures


Merci d'avance,


Le Grand Jisay
Afficher la suite 

4 réponses

Répondre au sujet
Le grand Jisay 100 Messages postés mardi 8 mai 2007Date d'inscription 18 février 2011 Dernière intervention - 28 déc. 2007 à 14:24
+3
Utile
J'ai trouvé le problème.
Et non, ce n'était pas ca le problème, j'avais bien placé ma colonne en DataGridViewImageColumn en manuel. En manuel (en cliquant sur la flèche en haut du datagridview en mode design et dans Modifier la colonne) j'avais cette erreur. J'ai alors donc supprimé carrément la colonne et je l'ai recréé par programmation. Comme ceci :
            DataGridViewImageColumn iconColumn = new DataGridViewImageColumn();
            dataGridView1.Columns.Insert(3,iconColumn);

Et la le code que j'ai placé fonctionne impec.

Je donne le code pour ceux que ca pourrait interressé...

//je remplis mon DataGridView quand je sélectionne un nom d'artiste dans une combobox

        private void toolStripComboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.cdsDataSet1.Clear();
            this.sqlDataAdapter1.SelectCommand.Parameters["@nom_artiste"].Value = this.toolStripComboBox1.Text;
            this.sqlDataAdapter1.Fill(cdsDataSet1);
            this.dataGridView1.Visible = true;
            icone();
        }

        // fonction pour le remplissage de la colonne

        public void icone()
        {
            DataGridViewImageColumn iconColumn = new DataGridViewImageColumn();
            dataGridView1.Columns.Insert(3,iconColumn);
           
            for(int i = 0 ; i<this.dataGridView1.Rows.Count-1;i++)
            {
                if (this.dataGridView1.Rows[i].Cells[2].Value.ToString() == "0")
                {
                    this.dataGridView1.Rows[i].Cells[3].Value = (Image)Bitmap.FromFile(@".\croix.bmp");
                }
                else
                {
                    this.dataGridView1.Rows[i].Cells[3].Value = (Image)Bitmap.FromFile(@".\ok.bmp");
                }
            }
        }

Et voila, je ne sais toujours pas pourquoi l'erreur s'est produite quand j'ai modifié la colonne DataGridViewTextBoxColumn en DataGridViewImageColumn en manuel, mais le code que j'ai placé fonctionne. Ne me reste plus qu'a accepter la réponse et à te remercier coq pour avoir chercher à élucider mon problème.

A+,

Le Grand Jisay
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Le grand Jisay
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 28 déc. 2007 à 13:32
0
Utile
Salut,

Et quelle est l'erreur ?

/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq
Le grand Jisay 100 Messages postés mardi 8 mai 2007Date d'inscription 18 février 2011 Dernière intervention - 28 déc. 2007 à 13:44
0
Utile
Salut,

J'ai une grande boite de dialogue dans laquelle il est écrit un pas mal de lignes.

L'erreur est du type System.FormatException: Cast non valide de 'System.String' en 'System.Drawing.Image'. --->System.InvalidCastExcept en 'System.Drawing.Image'.

Après il y a pas mal de texte mais je ne sais pas comment copier coller.

Et à la fin il est aussi écrit :

Pour remplacer cette boîte de dialogue par défaut, traitez l'événement DataError.

J'ai bien compris qu'il n'était pas possible de convertir une chaine de caractère en image mais je ne vois pas comment corriger ma faute...

Meri de ton aide coq,

Le Grand Jisay
Commenter la réponse de Le grand Jisay
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 28 déc. 2007 à 14:07
0
Utile
Ben tu essaies de placer un type Image dans une colonne destinée à recevoir un type String, donc forcément il n'apprécie pas.
Je te conseille de jeter un oeil à ceci : Comment : personnaliser la mise en forme des données dans le contrôle DataGridView Windows Forms

/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.