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

Windows Forms Discussion :

[C#2.0][DataSet XSD]WriteXml avec Image


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    SLE
    SLE est déconnecté
    Membre émérite Avatar de SLE
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 604
    Par défaut [C#2.0][DataSet XSD]WriteXml avec Image
    Bonjour,


    Je développe une appli avec VS2005 Express Edition, dans laquelle j'ai créé un dataset (.xsd).
    Je ne souhaite pas lier ce dataset à un sgbdr, mais simplement travailler en local avec des fichiers xml.
    Dans ce dataset, j'ai défini une table avec 4 colonnes : id (int32 autoincrémenté), nom (string), prenom (string) et photo (System.Object) qui contient des images bitmap (la colonne est liée à un PictureBox).
    Lorsque j'essaie d'écrire le fichier XML, l'appli lève une exception :

    System.Drawing.Bitmap does not implement IXmlSerializable interface therefore can not proceed with serialization

    Comment faire pour stocker les images dans le fichier xml ?

    Merci.

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2005
    Messages : 482
    Par défaut
    Salut,
    je n'ai pas testé, mais essaye de caster ta System.Drawing.Bitmap en System.Drawing.Image avant de l'intégrer dans ton dataset :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MonDataSet.Table["Truc"].Rows[0]["ChampsImage"] = (System.Drawing.Image)MonObjetBitmap
    Sinon, converti ton Bitmap en tableau de Byte : Byte[]
    cette méthode marche a tous les coups.

  3. #3
    SLE
    SLE est déconnecté
    Membre émérite Avatar de SLE
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 604
    Par défaut
    Je n'ai pas la possibilité de caster.
    J'ai créé le dataset visuellement (clic doit sur le projet, Add/New item/Dataset)
    J'obtiens alors un fichier DataSet1.xsd, dans lequel je crée mes tables, champs et liaisons.
    Ensuite j'instencie mon DataSet1 comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataSet1 ds = new DataSet1();
    Après ça, je n'ai plus accès à ds.tables[x]....
    Je peux faire par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ds.MaTable.AddMaTablerow(mes champs);
    La pas de problème, je pourrais insérer l'image sous forme de byte[] mais le problème c'est que je lie un picturebox au dataset (databinding) et que dans je charge un image dans le picturebox je n'ai pas la possibilité de caster au préalable.

    De plus, les colonnes qui contiennent des images sont de type System.Object et j'y stock des System.Drawing.Image, mais ça ne fonctionne quand même pas.

    Quand je sauvegarde avec WriteXml, j'ai l'erreur citée ci-dessus, avec System.Drawing.Bitmap

    Je crois que je dois créer un nouveau compo qui hérite de PictureBox, qui contient une Image qui hérite de System.Drawing.Bitmap mais qui implémente l'interface IXmlSerializable, mais je ne vois pas trop comment m'y prendre...

  4. #4
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Pourquoi ne pas mettre le chemin d'acces de l'image (dans le dataset) au lieu de l'image elle même ?
    La picturebox possède une propriété ImageLocation qui prend le chemin d'acces à une image et la charge automatiquement.
    Le binding est donc tout trouvé.

    Parceque sérialiser des images en xml...bof...bof
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  5. #5
    SLE
    SLE est déconnecté
    Membre émérite Avatar de SLE
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 604
    Par défaut
    Citation Envoyé par The_badger_man Voir le message
    Pourquoi ne pas mettre le chemin d'acces de l'image (dans le dataset) au lieu de l'image elle même ?
    Parce que je n'ai pas envie d'avoir 50000 fichiers de données à archiver. Je veux tout stocker dans un seul fichier, et je ne veux pas passer par des moteurs de DB à installer et configurer sur la machine avant de pouvoir utiliser mon appli. Donc je ne vois pas trop comment faire d'autre que d'utiliser le xml et de sérialiser mes images.

  6. #6
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Citation Envoyé par SLE Voir le message
    Parce que je n'ai pas envie d'avoir 50000 fichiers de données à archiver. Je veux tout stocker dans un seul fichier.
    T'auras donc 1 seul fichier de 50000 lignes. T'étonnes pas si ça met du temps au chargement.

    Sinon tout est expliqué dans le lien de macleod.
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2005
    Messages : 482

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

Discussions similaires

  1. gridview avec image dont la source un dataset ?
    Par lao.patrick dans le forum ASP.NET
    Réponses: 1
    Dernier message: 13/02/2010, 13h56
  2. Réponses: 3
    Dernier message: 08/12/2005, 10h38
  3. Formulaire et bouton submit avec image mapée
    Par dody dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 06/12/2004, 16h00
  4. [VB.NET] [ADO.NET] Adapter, TableMapping et DataSet xsd
    Par neo.51 dans le forum Accès aux données
    Réponses: 14
    Dernier message: 23/09/2004, 16h52
  5. boîte de dialogue avec image de fond + texte
    Par Eugénie dans le forum MFC
    Réponses: 13
    Dernier message: 31/08/2004, 13h32

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