/// <summary> /// 将数据的List转化为下拉菜单数据List /// </summary> /// <typeparam name="T">源数据类</typeparam> /// <param name="self">源数据List</param> /// <param name="textField">指向text字段的表达式</param> /// <param name="valueField">指向value字段的表达式</param> /// <param name="selectedCondition">默认被选中的条件</param> /// <returns>下拉菜单数据List</returns> public static List <ComboSelectListItem> ToListItems <T>(this List <T> self , Expression <Func <T, object> > textField , Expression <Func <T, object> > valueField , Expression <Func <T, bool> > selectedCondition = null) { var rv = new List <ComboSelectListItem>(); if (self != null) { //循环列表中的数据 foreach (var item in self) { //获取textField的值作为text string text = textField.Compile().Invoke(item).ToString(); //获取valueField的值作为value string value = valueField.Compile().Invoke(item).ToString(); //添加到下拉菜单List中 ComboSelectListItem li = new ComboSelectListItem { Text = text, Value = value }; //如果有默认选择的条件,则将当前数据带入到判断表达式中,如果返回true,则将下拉数据的selected属性设为true if (selectedCondition != null) { if (selectedCondition.Compile().Invoke(item)) { li.Selected = true; } } rv.Add(li); } } return(rv); }
/// <summary> /// 将枚举类型转化为下拉列表 /// </summary> /// <param name="self">枚举类型</param> /// <param name="value">value</param> /// <param name="pleaseSelect">pleaseSelect</param> /// <returns>下拉菜单数据列表</returns> public static List <ComboSelectListItem> ToListItems(this Type self, object value = null) { string[] names = null; Array values = null; //如果是枚举 if (self.IsEnum) { names = Enum.GetNames(self); values = Enum.GetValues(self); } //如果是nullable的枚举 if (self.IsGenericType && self.GenericTypeArguments[0].IsEnum) { names = Enum.GetNames(self.GenericTypeArguments[0]); values = Enum.GetValues(self.GenericTypeArguments[0]); } //生成下拉菜单数据 List <ComboSelectListItem> rv = new List <ComboSelectListItem>(); if (names != null) { for (int i = 0; i < names.Length; i++) { var name = names[i]; var newitem = new ComboSelectListItem { Text = PropertyHelper.GetEnumDisplayName(self, name), Value = ((int)values.GetValue(i)).ToString() }; if (value is string) { if (value != null) { string v = value.ToString(); var vs = v.Split(','); foreach (var item in vs) { if (item != null && (newitem.Value.ToString() == item.ToString()) || name == item.ToString()) { newitem.Selected = true; break; } } } } else if (value is IEnumerable it) { foreach (var item in it) { if (item != null && name == item.ToString()) { newitem.Selected = true; break; } } } else { if (value != null && name == value.ToString()) { newitem.Selected = true; } } rv.Add(newitem); } } return(rv); }