3

Entity Framework 5 を使用してデータベースを作成し、enum 機能を使用しました。ドロップダウンリストで定義したこれらの列挙型を使用したいと思います。

私の列挙型はここでEFによって作成されました:

namespace Dumpling
{
    using System;

    public enum DebtType : short
    {
        Mortgage = 0,
        Installment = 1,
        Revolving = 2,
        Judgement = 3,
        TaxLien = 4,
        TradelineDispute = 5,
        AddressDiscrepancy = 6, 
        NameVariation = 7
    }
}

私がやりたいことは、 内にドロップダウン リストを作成することListViewです。ドロップダウンリストで列挙型を使用する方法がわかりませんdatasourceID<asp:DropDownList>これを達成するために私はどのように見えますか?

4

2 に答える 2

3

MVC を使用する NopCommerce コード ベースから (わずかに変更):

public static SelectList ToSelectList<TEnum>(this TEnum enumObj, bool markCurrentAsSelected = true) where TEnum : struct {
    if (!typeof(TEnum).IsEnum) throw new ArgumentException("An Enumeration type is required.", "enumObj");

    var values = from TEnum enumValue in Enum.GetValues(typeof(TEnum))
                    select new { ID = Convert.ToInt32(enumValue), Name = enumValue.ToString() };
    object selectedValue = null;
    if (markCurrentAsSelected)
        selectedValue = Convert.ToInt32(enumObj);
    return new SelectList(values, "ID", "Name", selectedValue);
}

いくつかの NC 固有のコードを削除するための小さな変更を加えてこれをテストしていませんが、基本的な概念はそこにあるはずです。もちろん、SelectList はありませんが、これはかなり簡単に変更できるはずです。

于 2012-12-30T15:23:38.583 に答える
1

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();
}
于 2013-01-12T18:04:39.420 に答える