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 :

Modification PictureBox.image et Mise à jour dans SQL


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 249
    Points : 106
    Points
    106
    Par défaut Modification PictureBox.image et Mise à jour dans SQL
    Bonjour,

    J'ai une base de données mdf avec un champ Photo de type image, la base de données est rempli de données et correcte.

    Donc j'ai un DataSet dans mon Data Source windows avec tous mes tables le champ Photo est bien configuré pour PictureBox je choisi Details comme modèle et je déplace cette table sur ma fiche. La propriété DataBinding Image est bien configuré sur le champ Photo de la table.

    J'ajoute un gestionnaire OnClick du PictureBox pour pouvoir charger une image dans le PictureBox qui fonctionne bien car l'image se met à jour dans le picturebox.
    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
     
     private void photoPictureBox_Click(object sender, EventArgs e)
            {
                Stream myStream = null;
                OpenFileDialog openFileDialog1 = new OpenFileDialog();
                openFileDialog1.InitialDirectory = "J:\\MyPictures";
                openFileDialog1.Filter = "*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files (*.*)|*.*";
                openFileDialog1.FilterIndex = 2;
                openFileDialog1.RestoreDirectory = true;
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    try
                    {
                        if ((myStream = openFileDialog1.OpenFile()) != null)
                        {
                            using (myStream)
                            {
                                photoPictureBox.ImageLocation = openFileDialog1.FileName;
                                photoPictureBox.Load();
                                casinosBindingSource.EndEdit();
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
                    }
                }
            }
        }
    À l'exécution:
    Le problème c'est que lorsque que je me déplace dans la base et que je reviens sur l'enregistrement précédemment modifié je reviens à l'image orginale et ce uniquement pour le champ PictureBox alors que tous les autres champs si ils ont été modifiés sont corrects. C'est BindingSource.EndEdit Method qui devrait faire le travail je crois.

    Il faut aussi que quand je clique sur BindingNavigatorSaveItem_Click que le tout soit transféré dans la base de données je me souviens que je devais serialiser l'image du PictureBox en byte.

    Je suis en C# avec VS2010.

    Quelqu'un connait-il bien le sujet ?
    Nom : Snapshot.jpg
Affichages : 306
Taille : 28,8 Ko

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 249
    Points : 106
    Points
    106
    Par défaut
    Mise à jour,

    Voici le nouveau code
    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
     
      private void photoPictureBox_Click(object sender, EventArgs e)
            {
                OpenFileDialog openFileDialog1 = new OpenFileDialog();
                openFileDialog1.InitialDirectory = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName + "<a href="file://\\CasinosImage" target="_blank">\\CasinosImage</a>";
                openFileDialog1.Filter = "*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files (*.*)|*.*";
                openFileDialog1.FilterIndex = 2;
                openFileDialog1.RestoreDirectory = true;
     
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    photoPictureBox.ImageLocation = openFileDialog1.FileName;
                    photoPictureBox.Load();
     
                    MemoryStream Memstream = new MemoryStream();    
                    photoPictureBox.Image.Save(Memstream, System.Drawing.Imaging.ImageFormat.Jpeg);  // A generic error occurred in GDI+.
                    byte[] pic = Memstream.ToArray();
     
                    SqlConnection con = new SqlConnection(Properties.Settings.Default.CasinoDatabaseConnectionString);
                    SqlCommand com = new SqlCommand("UPDATE Casinos SET Photo = @pic WHERE CasinoID = 1", con);
                    com.Parameters.AddWithValue("@Pic", pic);
                    try
                    {
                        con.Open();
                        com.ExecuteNonQuery();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                    finally
                    {
                        con.Close();
                    }
                }
            }
        }
    Ça ne fonctionne pas j'ai le message d'erreur 'A generic error occurred in GDI+.' de toute façon ici je sauve l'image automatiquement dans la base de données aussitôt que je change l'image du picturebox ce que j'aimerais c'est que l'image soit sauvé dans la base de données uniquement lorsqu'on clique sur Save du BindingNavigator comme c'est le cas pour les autres champs tout en permettant de naviguer dans la base avec les modifications.
    Nom : CasinoDatabaseDefenition.jpg
Affichages : 289
Taille : 35,1 Ko

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 249
    Points : 106
    Points
    106
    Par défaut
    Bon j'ai trouvé

    Il faut charger l'image dans le pictureBox avec ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
      {
         photoPictureBox.Image = Image.FromFile(openFileDialog1.FileName);
      }
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    photoPictureBox.ImageLocation = openFileDialog1.FileName;
                    photoPictureBox.Load();
     
    ...
    }
    Ce qui ne génère aucun message d'erreur mais cause des problèmes avec un Binding Navigator

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/02/2007, 11h11
  2. QReport, pas de mise à jour dans les TQRMemo
    Par kurkaine dans le forum C++Builder
    Réponses: 6
    Dernier message: 16/09/2006, 19h11
  3. Date de mise à jour dans access
    Par Gabe74 dans le forum Access
    Réponses: 1
    Dernier message: 04/09/2006, 15h27
  4. Mise à jour dans un état
    Par Polo_973 dans le forum Access
    Réponses: 2
    Dernier message: 15/03/2006, 22h05
  5. Mise à jour dans un formulaire avec condition
    Par Bourni dans le forum Access
    Réponses: 4
    Dernier message: 06/03/2006, 23h13

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