3

「テスト」エンティティのリストを下のグリッドにバインドしようとしています。データフィールドに指定することで、 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
4

1 に答える 1