我正在尝试将“测试”实体列表绑定到下面的网格中。我可以通过为数据字段指定Person.Name
来获取User列以读取Person类的Name属性。
但是,当我尝试通过将datafield属性设置为MyEnum.Description
来让Desc列显示Enum值的描述时,我什么也得不到。没有错误,只是一个空白列。
这可能吗?我错过了什么吗?如果我在代码隐藏中做同样的事情,我会返回一个字符串“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属性。因此我使用了.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
答案 0 :(得分:1)
这与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;
}
<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>
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
}
};
}