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 :

Designer du DataSet qui efface les overrides


Sujet :

Windows Forms

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 59
    Par défaut Designer du DataSet qui efface les overrides
    Bonjour,

    J'utilise dans mon application un dataset fortement typé.

    Dans le code généré par l'IDE pour ce dataset (MonDataSet.Designer.cs), je vais à l'emplacement de la génération des objets DataRow et là j'overrides la fonction ToString() pour les DataRow de sorte que quand j'appelle cette fonction il me retourne la valeur d'un certain champ de la table...

    Le problème c'est que si je vais dans l'interface graphique du DataSet et que je modifie la DataTable, il me regénère tout le code et efface carrément sans rien me demander les overrides. Donc je dois chaque fois les remettre...

    Est-ce que quelqu'un a déjà eu le problème? Comment le résoudre? (via un attribut au dessus de la fonction surchargée?)

    D'avance merci.
    FTERF.

  2. #2
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Si tu travailles avec le framework 2 ou plus, tu peux tirer profit des classes partielles. Il suffit que n'importe ou ailleurs dans le code tu ajoutes ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    partial class TonDataSetGenere // même nom que la classe générée par le designer
    {
      public override string ToString() { ... }
    }
    Les classes partielles d'avoir d'un côté le code généré, qu'on touche jamais, et ailleurs du code à toi dont tu es entièrement maître et que le designer ne touche jamais.
    Ce n'est que de la syntaxe, à la compilation tout ça est mis dans la même classe.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 59
    Par défaut
    Ok merci beaucoup je vais essayer ça :-)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 59
    Par défaut
    Bonjour,

    En ajoutant le public partial class MonDataRow et en overridant le ToString dans cette même classe, et tout ça dans le fichier MonDataset.designer.cs, le designer l'efface quand même.

    Ou faut-il mettre ce code exactement ?

    (dans une autre classe d'un autre fichier, je ne peux pas hériter du DataRow en question...)

    Encore merci.
    FTERF.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Il faut vraiment créer un autre fichier que tu nommes par exemple MonDatasetExtension.cs.

    Et c'est dans ce fichier que tu places le code donné par Guulh

    Il faut savoir que c'est le fichier MonDataset.designer.cs qui est régénéré automatiquement.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 59
    Par défaut
    Je viens d'essayer en ajoutant un fichier correspondant au DataRow de la table concernée. Donc une nouvelle classe nomée MonDataRow.cs.

    J'ai copié-collé tout le code du DataRow généré vers la nouvelle classe et dans celle-ci j'ai défini le ToString()...

    Mais il veut rien savoir. Il prend toujours ce qu'il se trouve dans le fichier généré.

    Donc il faut reprendre tout le code du DataSet entier ?

    Merci bcp.
    FTERF.

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Ta classe est maintenant dans un fichier autre que celui regénéré. Ca c'est ok mais quand tu dis que tu as nommé ta classe MonDataRow.cs ça veut dire quoi exactement... Tu parles du fichier en fait (pas la classe ).

    La classe par contre est bien partielle ? et elle reprend le nom de la classe partielle qui est dans ton fichier MonDataset.designer.cs ?

    Je te met un lien sur les classes partielles :
    classes partielles

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 59
    Par défaut
    En fait mon DataSet est dans un projet. Donc j'ai le fichier MonDataSet.Designer.cs. Dedans, j'ai une table ResourcesCategories et donc il a généré une classe ResourcesCategoriesRow.

    J'ai créé une nouvelle classe dans ce projet dont le fichier est MonDataSetExtensions.cs.

    Dedans, une classe partielle nommée ResourcesCategoriesRow et qui hérite de la classe générée ResourcesCategoriesRow du dataset.
    Dans cette classe, j'override le ToString pour retourner this.Label (où Label est le nom d'un des champs de la table ResourcesCategories).

    Mais il n'a pas l'air d'en vouloir...

    Merci pour le lien vais jeter un coup d'oeil.
    FTERF

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 59
    Par défaut
    Ok autant pour moi, j'ai enfin réussi. Il ne fallait pas hériter des classes générées. Donc dans mon nouveau fichier :

    public partial class dsResources
    {
    public partial class ResourcesCategoriesRow
    {
    public override string ToString()
    {
    return this.Label;
    }
    }
    }

    Encore merci pour les réponses.
    FTERF.

  10. #10
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Penses à mettre si c'est le cas

Discussions similaires

  1. [MySQL] effacer les enregistrements qui ont plus d'un an
    Par laurentSc dans le forum PHP & Base de données
    Réponses: 20
    Dernier message: 10/08/2014, 19h46
  2. [Google Maps] Effacer les marker qui sont afficher lors de chargement de la page
    Par bhrochdi dans le forum APIs Google
    Réponses: 3
    Dernier message: 26/11/2013, 16h29
  3. Pb formulaire qui efface les données
    Par cakao dans le forum Langage
    Réponses: 2
    Dernier message: 12/12/2011, 22h59
  4. Page qui fonctionne correctement après avoir effacé les cookies
    Par MarathonMan3 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 09/11/2011, 19h14
  5. Réponses: 1
    Dernier message: 11/09/2006, 11h21

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