c# - 将枚举属性数据绑定(bind)到网格并显示描述

标签 c# winforms data-binding datagridview enums

这是与 How to bind a custom Enum description to a DataGrid 类似的问题,但就我而言,我有多个属性。

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; }
}

我将 BindingList 绑定(bind)到 WinForms DataGridView(实际上是 DevExpress.XtraGrid.GridControl,但通用解决方案的适用范围更广)。我希望出现描述而不是枚举名称。我怎样才能做到这一点? (类/枚举/属性没有任何限制;我可以随意更改它们。)

最佳答案

TypeConverter 通常可以完成这项工作;这是一些适用于 DataGridView 的代码 - 只需添加您的代码即可阅读描述(通过反射等 - 我现在只是使用了一个字符串前缀来显示自定义代码的工作)。

请注意,您可能也想覆盖 ConvertFrom。转换器可以在类型 属性级别指定(如果您只希望它应用于某些属性),并且如果枚举不受您的控制,也可以在运行时应用。

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);
    }
}

关于c# - 将枚举属性数据绑定(bind)到网格并显示描述,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1540103/

相关文章:

c# - 即使设置了 CommandParameter,ICommand.CanExecute 也被传递为 null

c# - 如何使用 Json.NET 填充 IList 集合

c# - 在单独的类中引用表单

C# 将通过远程桌面(或其他)在本地运行的 WinForm 应用程序连接到数据库

.net - 如何在.NET Chart控件中向堆叠系列添加点?

C# 数据绑定(bind) : Create object if null

c# - 面向客户的 API 的依赖注入(inject)

c# - 从文件名中删除特殊字符

c# - 如何从 DataGridView 中删除选定的行?

javascript - 在UI5表格的不同行中添加不同的控件