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.