asp:RadioButtonListがあり、値を列挙型に宣言的にバインドしたいと思います。このタイプの構文を使用してみました:
value = <%# ((int)MyEnum.Value).ToString() %>"
エラーリストアイテムがデータバインディングをサポートしていないというメッセージが表示されます。何か案は?
asp:RadioButtonListがあり、値を列挙型に宣言的にバインドしたいと思います。このタイプの構文を使用してみました:
value = <%# ((int)MyEnum.Value).ToString() %>"
エラーリストアイテムがデータバインディングをサポートしていないというメッセージが表示されます。何か案は?
基本的に、やりたいことを正確に行うことはできません。これは、Asp:Listitemにデータバインディングイベントが含まれていないためです。ただし、RadioButtonList自体はこれをサポートしています。
だからここに私があなたが望んでいたものに近づくことができる最も近いものがあります。
これがHTMLです
<asp:RadioButtonList runat="server" ID="rbl" DataSource='<%# EnumValues %>' DataValueField='Value' DataTextField='Key' />
これが背後にあるコードです
Public Enum values As Integer
first = 1
second = 2
third = 3
fourth = 4
fifth = 5
End Enum
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Page.DataBind()
End Sub
Public ReadOnly Property EnumValues() As System.Collections.Generic.Dictionary(Of String, String)
Get
Dim val As values
Dim names As Array
Dim values As Array
Dim stuff As Dictionary(Of String, String) = New Dictionary(Of String, String)
names = val.GetNames(val.GetType)
values = val.GetValues(val.GetType)
build the final results
For i As Integer = 0 To names.Length - 1
stuff.Add(names(i), values(i))
Next
Return stuff
End Get
End Property
バインドするのではなく、列挙型を繰り返し処理します。
Array itemValues = System.Enum.GetValues(typeof(Response));
Array itemNames = System.Enum.GetNames(typeof(Response));
for (int i = 0; i <= itemNames.Length - 1 ; i++) {
ListItem item = new ListItem(itemNames(i), itemValues(i));
radioButtonList1.Items.Add(item);
}