「テスト」エンティティのリストを下のグリッドにバインドしようとしています。データフィールドに指定することで、 User 列に Person クラスの Name プロパティを読み取ることができます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
.
<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