因此,也许这是一个糟糕的设计;我不知道。但是说我有一个 DataTable 带有一列 int 值;这些价值实际上是为了代表一些 enum 我在项目中拥有的类型。

我想做的是 DataGridView 绑定到该表,并让列显示 enum 而不是整数值“ 0”或“ 1”或其他。

我考虑的一个选择是完成整个归一化的事情:在 DataSetenum 其中的名称,在 enum 值,并有我的第一张表格 桌子。

但这是一个 enum- 特定的想法。我想知道是否可以写自己的 IFormatProviderICustomFormatter 实现*对于给定类型,并使用该格式来控制在一个给定列中显示值的方式 DataGridView 控制(或真正在 任何 为此,控制)。

*这就是我怀疑它会做到的,如果我要问的是可能的话。我根本没有真正使用这些界面。

有帮助吗?

解决方案

您确实可以实现自定义 ICustomFormatter, ,但由于 DataGridView, ,您实际需要告诉它如何应用您的格式化器。

第一组 column.DefaultCellStyle.FormatProvider 到您的自定义格式类的实例。然后,处理 CellFormatting 事件:

void dataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) {
    if (e.CellStyle.FormatProvider is ICustomFormatter) {
        e.Value = (e.CellStyle.FormatProvider.GetFormat(typeof(ICustomFormatter)) as ICustomFormatter).Format(e.CellStyle.Format, e.Value, e.CellStyle.FormatProvider);
        e.FormattingApplied = true;
    }
}

格式化类看起来像这样:

public class MyEnumFormatter : IFormatProvider, ICustomFormatter {

    public object GetFormat(Type formatType) {
        if (formatType == typeof(ICustomFormatter))
            return this;
        else
            return null;
    }

    public string Format(string format, object arg, IFormatProvider formatProvider) {
        return ((NameOfEnumType)Convert.ToInt32(arg)).ToString();
    }

}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top