ListView 内に DropDownList がある場合は、次のアプローチを使用します (最適化できる可能性があります。ASP.NET Web フォームのスキルが低下しています)。
モデル:
public enum AnimalType
{
Dog = 1,
Cat = 2,
Sheep = 3,
Horse = 4
}
public class Animal
{
public string Name { get; set; }
public AnimalType Type { get; set; }
}
ページ:
<asp:ListView ID="lstAnimals" runat="server" onitemdatabound="lstAnimals_ItemDataBound">
<ItemTemplate>
<div>
<asp:TextBox runat="server" Text='<%#Eval("Name") %>' />
<asp:DropDownList ID="lstAnimalType" runat="server" DataValueField="Id" DataTextField="Description" />
</div>
</ItemTemplate>
コードビハインド:
protected void Page_Load(object sender, EventArgs e)
{
var animals = new List<Animal>();
animals.Add(new Animal() { Name = "Doggie", Type = AnimalType.Dog});
animals.Add(new Animal() { Name = "Sheepie", Type = AnimalType.Sheep });
lstAnimals.DataSource = animals;
lstAnimals.DataBind();
}
protected void lstAnimals_ItemDataBound(object sender, ListViewItemEventArgs e)
{
var ddlAnimalType = (DropDownList)e.Item.FindControl("lstAnimalType");
var enumValues = Enum.GetValues(typeof (AnimalType)).Cast<AnimalType>().ToList();
var bindableList = enumValues.Select(v => new { Id = (int) v, Description = v.ToString() });
ddlAnimalType.DataSource = bindableList;
ddlAnimalType.DataBind();
}