Yaratmış olduğumuz enumları dropdown’ımıza bind edip gelen değeri enum değerine çevirerek cast işlemlerinden kurtulabiliriz.
Aşağıdaki şekilde jenerik bir metod yazıyoruz.
public static List<ListItem> GetList<TEnum>() where TEnum : struct
{
List<ListItem> items = new List<ListItem>();
foreach (int value in Enum.GetValues(typeof(TEnum)))
{
items.Add(new ListItem
{
Text = Enum.GetName(typeof(TEnum), value),
Value = value.ToString()
});
}
return items;
}
Aşağıdaki metodu çağırdığımızda enumun value ve keylerini dropdown’ımıza bind etmiş oluyoruz.
private void BindExtensionType()
{
ddlExtensionType.DataSource = GetList<ExtensionType>();
ddlExtensionType.DataBind();
}
Aşağıdaki metodu kullanarak ise seçilen item’ın enum değerini jenerik bir şekilde almış olacağız.
public static TEnum SelectedItemEnum<TEnum>(string value) where TEnum : struct
{
return (TEnum)Enum.Parse(typeof(TEnum),
String.IsNullOrEmpty(value) ? "0" : value);
}
Gelen string değerini enum değerimize dönüştürmemiz için ise aşağıdaki şekilde bir metod yazmamız yeterli olacaktır.
private ExtensionType GetExtensionType()
{
return SelectedItemEnum<ExtensionType>(ddlExtensionType.Items[ddlExtensionType.SelectedIndex].Value);
}
public static TEnum SelectedItemEnum<TEnum>(string value) where TEnum : struct
{
return (TEnum)Enum.Parse(typeof(TEnum),
String.IsNullOrEmpty(value) ? "0" : value);
}
Örnek enumumuz aşağıdaki gibidir:
public enum ExtensionType
{
[StringValue("ExtensionType1")]
ExtensionType1= 0,
[StringValue("ExtensionType2")]
ExtensionType2= 1,
[StringValue("ExtensionType3")]
ExtensionType3= 2,
Undefined = 3,
}
Bir sonraki yazımda görüşmek üzere, hoşçakalın.