gpt4 book ai didi

asp.net - RadGrid - 我可以将列数据字段属性设置为枚举描述吗?

转载 作者:行者123 更新时间:2023-12-03 18:15:48 24 4
gpt4 key购买 nike

我正在尝试将“测试”实体列表绑定(bind)到下面的网格。通过为数据字段指定 Person.Name,我能够让 User 列读取 Person 类的 Name 属性。

但是,当我尝试通过将数据字段属性设置为 MyEnum.Description 来让 Desc 列显示枚举值的描述​​时,我什么也没得到。没有错误,只有一个空白列。

这可能吗?我错过了什么吗?如果我在代码隐藏中做同样的事情,我会返回一个字符串“Hello”。

如果有帮助的话,我宁愿在后面的代码中使用 ItemDataBound 事件。

Public Class Test

Property MyPerson As Person
Property MyEnum As HelloWorldEnum = HelloWorldEnum.Hi

Public Enum HelloWorldEnum
<ComponentModel.Description("Hello")> Hi
<ComponentModel.Description("World")> Earth
End Enum

End Class

Public Class Person
Property Name As String
End Class

我的网格示例:

<telerik:radgrid id="grid" runat="server">
<mastertableview>
<Columns>
<telerik:GridBoundColumn DataField="MyPerson.Name" HeaderText="User" />
<telerik:GridBoundColumn DataField="MyEnum.Description" HeaderText="Desc" />
</Columns>
</mastertableview>
</telerik:radgrid>

更新:抱歉,我遗漏了一个事实,即我们创建了一个扩展方法来读取枚举的描述属性。因此我使用了 .Description

<Extension()>
Public Function Description(ByVal theEnum As [Enum]) As String
Dim fi As FieldInfo = theEnum.GetType().GetField(theEnum.ToString)
Dim attributes() As DescriptionAttribute = DirectCast(fi.GetCustomAttributes(GetType(DescriptionAttribute), False), DescriptionAttribute())
If attributes.Length > 0 Then
Return attributes(0).Description
Else
Return theEnum.ToString
End If
End Function

最佳答案

这与 Telerik RadGrid 无关。您需要一个辅助方法来获取枚举的描述。

Adding Descriptions to your Enumerations

public static string GetDescription(object enumValue, string defDesc)
{
FieldInfo fi = enumValue.GetType().GetField(enumValue.ToString());

if (null != fi)
{
object[] attrs = fi.GetCustomAttributes(typeof(DescriptionAttribute), true);
if (attrs.Length > 0)
return ((DescriptionAttribute)attrs[0]).Description;
}
return defDesc;
}

enter image description here

ASPX

<telerik:RadGrid ID="grid" runat="server" 
OnNeedDataSource="grid_NeedDataSource"
AutoGenerateColumns="False">
<MasterTableView>
<Columns>
<telerik:GridBoundColumn DataField="MyPerson.Name"
HeaderText="User" />
<telerik:GridBoundColumn DataField="MyEnum" HeaderText="Value" />
<telerik:GridTemplateColumn HeaderText="Desc" >
<ItemTemplate>
<%# GetDescription(Eval("MyEnum"), "Nothing") %>
</ItemTemplate>
</telerik:GridTemplateColumn>
</Columns>
</MasterTableView>
</telerik:RadGrid>

ASPX.CS

public class Test
{

public Person MyPerson { get; set; }
public HelloWorldEnum MyEnum { get; set; }

public enum HelloWorldEnum
{
[Description("Hello")]
Hi,
[Description("World")]
Earth
}
}

public class Person
{
public string Name { get; set; }
}

protected void grid_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
grid.DataSource = new List<Test>()
{
new Test
{
MyPerson = new Person {Name = "Jon"},
MyEnum = Test.HelloWorldEnum.Earth
}
};
}

关于asp.net - RadGrid - 我可以将列数据字段属性设置为枚举描述吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19436390/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com