Nie jestem pewien, ile to pomaga, ale używam metodę rozszerzenia na Enum, który wygląda tak:
/// <summary>
/// Returns the value of the description attribute attached to an enum value.
/// </summary>
/// <param name="en"></param>
/// <returns>The text from the System.ComponentModel.DescriptionAttribute associated with the enumeration value.</returns>
/// <remarks>
/// To use this, create an enum and mark its members with a [Description("My Descr")] attribute.
/// Then when you call this extension method, you will receive "My Descr".
/// </remarks>
/// <example><code>
/// enum MyEnum {
/// [Description("Some Descriptive Text")]
/// EnumVal1,
///
/// [Description("Some More Descriptive Text")]
/// EnumVal2
/// }
///
/// static void Main(string[] args) {
/// Console.PrintLine(MyEnum.EnumVal1.GetDescription());
/// }
/// </code>
///
/// This will result in the output "Some Descriptive Text".
/// </example>
public static string GetDescription(this Enum en)
{
var type = en.GetType();
var memInfo = type.GetMember(en.ToString());
if (memInfo != null && memInfo.Length > 0)
{
var attrs = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
if (attrs != null && attrs.Length > 0)
return ((DescriptionAttribute)attrs[0]).Description;
}
return en.ToString();
}
Można użyć niestandardowej właściwości getter na obiekcie, aby przywrócić Nazwa:
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(); } }
}
Następnie związać swoją siatkę do "RequiredExpectationResultDescr" i "NonRequiredExpectationResultDescr" właściwości.
To może być trochę zbyt skomplikowane, ale jego 1st rzecz wymyśliłem :)
Dzięki Marc! W połączeniu z naszym EnumHelper (podobnym do pierwszej części odpowiedzi rally25rs), to eleganckie rozwiązanie działa pięknie - w DataGridView. Niestety znalazłem, że DevExpress.XtraGrid.GridControl nie ** wykrywa atrybutu TypeConverter. Westchnienie. Ale twoja odpowiedź jest wyraźnie poprawna. – TrueWill
... i wskazałeś mi właściwy kierunek. Zauważyłem, że program Developer Express nie planuje obsługiwać tego rozwiązania i oferuje to obejście: http://www.devexpress.com/Support/Center/p/CS2436.aspx – TrueWill