A TypeConverter
обычно выполняет эту работу; Вот некоторый код, который работает для DataGridView
- просто добавьте его в код, чтобы прочитать описания (с помощью размышлений и т. д. Я сейчас использовал строковый префикс, чтобы показать, что пользовательский код работает).
Обратите внимание, что вы, вероятно, тоже хотите переопределить ConvertFrom
. Конвертер может быть указан в типе или на уровне свойств (в случае, если вы хотите, чтобы он применялся только для некоторых свойств), а также может применяться во время выполнения, если enum не находится под вашим контролем.
using System.ComponentModel;
using System.Windows.Forms;
[TypeConverter(typeof(ExpectationResultConverter))]
public enum ExpectationResult
{
[Description("-")]
NoExpectation,
[Description("Passed")]
Pass,
[Description("FAILED")]
Fail
}
class ExpectationResultConverter : EnumConverter
{
public ExpectationResultConverter()
: base(
typeof(ExpectationResult))
{ }
public override object ConvertTo(ITypeDescriptorContext context,
System.Globalization.CultureInfo culture, object value,
System.Type destinationType)
{
if (destinationType == typeof(string))
{
return "abc " + value.ToString(); // your code here
}
return base.ConvertTo(context, culture, value, destinationType);
}
}
public class TestResult
{
public string TestDescription { get; set; }
public ExpectationResult RequiredExpectationResult { get; set; }
public ExpectationResult NonRequiredExpectationResult { get; set; }
static void Main()
{
BindingList<TestResult> list = new BindingList<TestResult>();
DataGridView grid = new DataGridView();
grid.DataSource = list;
Form form = new Form();
grid.Dock = DockStyle.Fill;
form.Controls.Add(grid);
Application.Run(form);
}
}