1

我在 WPF 中使用 MarkupConverters 将枚举值解析为人类可读的字符串。

ASP.NET 和 ASP.NET GridView 或 DevExpress ASPxGridView 有没有办法在 WPF 中做同样的事情?

ASP.NET 中类似的东西(来自 WPF):

using System;
using System.Globalization;
using System.Windows.Data;
using System.Windows.Markup;

namespace Converters
{
    public class PriorityToStringConverter
        : MarkupExtension, IValueConverter
    {
        public PriorityToStringConverter()
        {
        }

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value is byte)
            {
                switch ((byte)value)
                {
                    case 0:
                        return "Very high";

                    case 1:
                        return "High";

                    case 2:
                        return "Normal";

                    case 3:
                        return "Low";

                    case 4:
                        return "Very low";

                    default:
                        return value;
                }
            }

            return value;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return null;
        }

        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return this;
        }
    }
}
4

1 回答 1

0

好吧,不幸的是,ASP.Net 没有内置的转换器,例如 WPF。您可以做的是让您自己的自定义转换器在 ASP.Net GridView 上使用。
这是一个简短的例子:

首先将 a 添加System.ComponentModel.Description到您的枚举值中,如下所示:

public enum MyEnum
{
    [Description("Desc for A")]
    MyA = 0,
    [Description("Desc for X")]
    MyX,
    [Description("Desc for Y")]
    MyY
}

对于演示,我的数据模型是以下列表:

public class MyData
{
    public string Name { get; set; }
    public MyEnum Value {get; set;}
}

现在,在您的页面中创建以下函数,该函数提取给定特定枚举值的描述​​:

    public static string GetEnumDescription(Enum value)
    {
        FieldInfo fi = value.GetType().GetField(value.ToString());

        DescriptionAttribute[] attributes =
            (DescriptionAttribute[])fi.GetCustomAttributes(
            typeof(DescriptionAttribute),
            false);

        if (attributes != null && attributes.Length > 0)
            return attributes[0].Description;
        else
            return value.ToString();
    }

GridView 中的用法:

     <Columns>
        <asp:TemplateField HeaderText="Value" SortExpression="Value">
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server" Text='<%# GetEnumDescription((Enum)Eval("Value")) %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>

我基本上做的是在使用Eval获取Value特定行的属性之后,我调用我创建的函数来提取描述,给出枚举值,这就是我在标签中显示的内容。

于 2012-12-09T08:29:00.877 回答