11
votes

Data Linge Enum Propriétés à la grille et à l'affichage Description

Ceci est une question similaire à Comment se lier Une description personnalisée Enum sur un DataGrid , mais dans mon cas, j'ai plusieurs propriétés.

public enum ExpectationResult
{
    [Description("-")]
    NoExpectation,

    [Description("Passed")]
    Pass,

    [Description("FAILED")]
    Fail
}

public class TestResult
{
    public string TestDescription { get; set; }
    public ExpectationResult RequiredExpectationResult { get; set; }
    public ExpectationResult NonRequiredExpectationResult { get; set; }
}


0 commentaires

3 Réponses :


10
votes

a typeconverter fera généralement le travail; Voici un code qui fonctionne pour DataGridView - Ajoutez simplement votre code pour lire les descriptions (via réflexion, etc. - Je viens d'utiliser un préfixe à chaîne pour afficher le code de code personnalisé).

Remarque Vous voudrez probablement remplacer convertfrom aussi. Le convertisseur peut être spécifié au type ou le niveau de propriété (au cas où vous ne voulez que s'appliquer à certaines propriétés), et peut également être appliqué au moment de l'exécution si l'ENum n'est pas sous votre contrôle. xxx


2 commentaires

Merci Marc! Combinée à notre Enumhelper (semblable à la première partie de la réponse de Rally25rs), cette solution élégante fonctionne magnifiquement - dans un DataGridView. Malheureusement, j'ai trouvé que le DEVEXPRESS.XTRAGRID.GRIDCONTROL fait pas détecter l'attribut Typonverter. Soupir. Mais votre réponse est clairement correcte.


... Et tu m'as pointé dans la bonne direction. J'ai trouvé que Developer Express ne prévoit pas de l'appuyer et propose cette solution de contournement: DevExpress .com / support / centre / p / cs2436.aspx



5
votes

Je ne suis pas sûr de savoir combien cela aide, mais j'utilise une méthode d'extension sur Enum qui ressemble à ceci: xxx pré>

Vous pouvez utiliser une propriété personnalisée sur votre objet pour renvoyer le Nom: P>

public class TestResult
{
    public string TestDescription { get; set; }
    public ExpectationResult RequiredExpectationResult { get; set; }
    public ExpectationResult NonRequiredExpectationResult { get; set; }

    /* *** added these new property getters *** */
    public string RequiredExpectationResultDescr { get { return this.RequiredExpectationResult.GetDescription(); } }
    public string NonRequiredExpectationResultDescr { get { return this.NonRequiredExpectationResult.GetDescription(); } }
}


1 commentaires

+1 pour une bonne suggestion - merci; Nous avons déjà une classe d'énumhelper comme votre exemple et un autre développeur a suggéré les propriétés de la chaîne, mais je suis paresseux. ;)



2
votes

Basé sur les deux autres réponses, j'ai mis en place une classe qui peut convertir génériquement entre une énumération arbitraire et une chaîne à l'aide d'un attribut de description sur chaque valeur Enum.

Ceci utilise System.comPonTmodel pour la définition de la descriptionAttribute, et ne prend en charge que la conversion entre t et chaîne. xxx


0 commentaires