2019年2月15日金曜日

[.NET]コード内Enumだけで宣言したデータでドロップダウンの候補をセット

オリジナルのドロップダウンを作成する場合、宣言部だけで使いまわしたい…
ということで以下。

①Enum宣言
----------------------------------------------

public enum enumHito : byte
 {
            [Display(Name = "太郎")]
            Tarou = 12334,
            [Display(Name = "花子")]
            Hanako = 19483,
}

----------------------------------------------
②宣言したEnumから属性:NameをGetする共通関数を作成しておく。

----------------------------------------------

//属性:Nameを取得
public static class GetAttribute
    {
        public static string Name(object obj)
        {
            var fieldInfo = obj.GetType().GetField(obj.ToString());
            var descriptionAttributes = fieldInfo.GetCustomAttributes(typeof(DisplayAttribute), false) as DisplayAttribute[];
            if (descriptionAttributes != null && descriptionAttributes.Length > 0)
            {
                return descriptionAttributes[0].Name;
            }
            else
            {
                return string.Empty;
            }
        }

    }
----------------------------------------------

③②を使って①情報からドロップダウン候補をデータバインドする。

----------------------------------------------
var data = new List<Tuple<int, string>>();
foreach (enumKenaskuShubetsu row in Enum.GetValues(typeof(enumHito)))
{
  data.Add(new Tuple<int, string>((int)row, GetAttribute.Name(row)));
}
ddlhoge.DataValueField = "item1";
ddlhoge.DataTextField = "item2";
ddlhoge.DataSource = data;

ddlhoge.DataBind();

----------------------------------------------

0 件のコメント:

コメントを投稿