[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Enum)]
public class EnumSignAttribute : Attribute
{
// Fields
private string _displayName; public EnumSignAttribute(string displayname)
{
this._displayName = displayname;
} // Properties
public string DisplayName
{
get
{
return this._displayName;
}
set
{
this._displayName = value;
}
}
}
   枚举
?123456789101112public enum DataType
{
[EnumSign("布尔类型")]
Boolean = 4,
[EnumSign("日期时间")]
DateTime = 3,
None = 0,
[EnumSign("数字")]
Numberic = 2,
[EnumSign("字符串")]
String = 1 }
public static class EnumsUtils
{
/// <summary>
/// 根据object类型的数据,获取枚举类型
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="enumValue"></param>
/// <returns></returns>
public static T ConvertToEnum<T>(object enumValue)
{
if (enumValue is int)
{
return (T)enumValue;
}
Type type = typeof(T);
FieldInfo[] fields = type.GetFields();
int num = 0;
foreach (FieldInfo info in fields)
{
if (num == 0)
{
num++;
}
else
{
T local = (T)info.GetValue(type);
if (local.ToString().Equals(enumValue))
{
return local;
}
}
}
return default(T);
} /// <summary>
/// 根据枚举标识,获取显示名字
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="enumValue">枚举标识</param>
/// <returns>显示名字</returns>
public static string GetAttriValue<T>(T enumValue)
{
Type type = typeof(T);
FieldInfo[] fields = type.GetFields();
int num = 0;
foreach (FieldInfo info in fields)
{
if (num == 0)
{
num++;
}
else
{
T local = (T)info.GetValue(type);
if (local.Equals(enumValue))
{
return GetDisplayName(info);
}
}
}
return string.Empty;
} private static string GetDisplayName(FieldInfo field)
{
string displayName = string.Empty;
object[] arr = field.GetCustomAttributes(typeof(EnumSignAttribute), true);
if (arr.Length > 0)
{
EnumSignAttribute aa = (EnumSignAttribute)arr[0];
displayName = aa.DisplayName;
}
return displayName;
} /// <summary>
/// 获取枚举集合列表
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
public static EnumList GetSourceEnum(Type type)
{
EnumList list = new EnumList();
FieldInfo[] fields = type.GetFields();
foreach (FieldInfo field in fields)
{
EnumItem item = new EnumItem();
if (field.FieldType.IsEnum)
{
item.Value = ((int)type.InvokeMember(field.Name, BindingFlags.GetField, null, null, null));
object[] arr = field.GetCustomAttributes(typeof(EnumSignAttribute), true);
if (arr.Length > 0)
{
EnumSignAttribute aa = (EnumSignAttribute)arr[0];
item.Display = aa.DisplayName;
}
item.Name = field.Name;
list.Add(item);
}
}
return list;
}
} [StructLayout(LayoutKind.Sequential)]
public struct EnumItem
{
private string _display;
private string _name;
private object _value; public EnumItem(string display, string name, object value)
{
this._display = display;
this._name = name;
this._value = value;
} public string Display
{
get
{
return this._display;
}
set
{
this._display = value;
}
} public string Name
{
get
{
return this._name;
}
set
{
this._name = value;
}
} public object Value
{
get
{
return this._value;
}
set
{
this._value = value;
}
}
} 获取枚举集合列表
public class EnumList : BindingList<EnumItem>
{
} //方法1:
EnumList = EnumsUtils.GetSourceEnum.(typeof(DataType));
//方法2:
var = EnumsUtils.GetSourceEnum.(typeof(DataType)); 数据源

c#枚举自定义,用于数据绑定。 z的更多相关文章

  1. c#枚举自定义,用于数据绑定。

    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Enum)] public ...

  2. 客户端获取服务端自定义类数据 z

    客户端获取服务端自定义类数据 问题一:超时问题,在最后获取数据的时候突然提示服务超时,服务已断开 解决:配置文件添加: <bindings> <wsHttpBinding> & ...

  3. WPF MVVM示例自定义模板数据绑定

    在触摸屏设备上.由于列表是的信息展示不是非常直观和便捷操作. 所以也就出现了很多用面板控件:类似win10的Metro风格, 所以抽空做了一个WPF面板控件. 话不多上 , 先上一个示例图. 为了便于 ...

  4. 开窗函数使用及sql自行构建枚举数据用于关联

    1, SELECT  * FROM    ( SELECT    ROW_NUMBER() OVER ( PARTITION BY process_instance_id (区分相似数据的字段,逗号分 ...

  5. 使用XtraGrid自定义列计算 z

    绑定Master-Detail 关系 数据也是数据显示的一种方式,此实例使用后台代码创建数据源并绑定到gridcontrol. 其实方式参见:点击打开链接 先看效果图(默认方式) 直接给出后台代码,主 ...

  6. 最全面阐述WebDataBinder理解Spring的数据绑定

    每篇一句 不要总问低级的问题,这样的人要么懒,不愿意上网搜索,要么笨,一点独立思考的能力都没有 相关阅读 [小家Spring]聊聊Spring中的数据绑定 --- DataBinder本尊(源码分析) ...

  7. ASP.NET 一句代码实现批量数据绑定

    摘要:对于一个以数据处理为主的应用中的UI层,我们往往需要编写相当多的代码去实现数据绑定.如果界面上的控件和作为数据源的实体类型之间存储某种约定的映射关系,我们就可以实现批量的数据绑定,作者开发了的插 ...

  8. 实现 Castor 数据绑定--转

    第 1 部分: 安装和设置 Castor 数据绑定风靡一时 在 XML 新闻组.邮件列表和网站的讨论论坛中(在 参考资料 中可以找到这些内容的链接),最常见的一个主题就是数据绑定.Java 和 XML ...

  9. 在C#编程中玩转枚举,分享我的EnumHelper。

    在C#编程中玩转枚举,分享我的EnumHelper. 在软件开发过程中,我们经常会为特定的场景下的特定数据定义逻辑意义.比如在用户表中,我们可能会有一个用户状态字段,该字段为整形.如果该字段的值为1则 ...

随机推荐

  1. android 点九PNG技术 适应不同分辨率 完美显示效果

    .9.png是一种非失真性压缩位图图形文件格式.PNG格式是非失真性压缩的,允许使用类似于GIF格式的调色板技术,支持真彩色图像,并具备阿尔法通道(半透明)等特性.现在有很多人使用PNG格式于互联网及 ...

  2. iOS Core Telephony Framework

    Core Telephony Framework(核心通讯框架) 概述: 这个库的前缀为CT(Core Telephony),主要用来获得用户通讯相关信息,我们可以使用这些信息来定义外部接口以便自己使 ...

  3. HighCharts开发说明及属性详解

    一.HighCharts开发说明: HighCharts 开发实际上配置HighCharts每个部分,比如配置标题(title),副标题(subtitle)等,其中每个部分又有更细的参数配置,比如标题 ...

  4. SSM整合配置

    SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis) 使用SSM(Spring.SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有 ...

  5. 机器人学 —— 轨迹规划(Sampling Method)

    上一篇提到,机器人轨迹规划中我们可以在 Configuration Space 中运行A* 或者 DJ 算法.无论A* 还是DJ 算法,都必须针对邻域进行搜索,如果2自由度则有4邻域,2自由度则有8邻 ...

  6. jsp页面变量作用域问题

    想实现一个注销的功能,在页面上有个注销按钮,我想一点它就注销,用了js给按钮加了onclick代码,如下 <%      session = request.getSession(true); ...

  7. mencoder mencoder 安装使用及常用参数

    mencoder 安装及使用 1.安装:            参考:http://hi.baidu.com/putword/item/e5910a187d2aed14e2f9867f 2.合并视频: ...

  8. android 四种堆状态

    总结下: ====> 建议首先阅读下面两篇文章,这样才可以更好的理解Activity的加载模式: Android的进程,线程模型 http://www.cnblogs.com/ghj1976/a ...

  9. zoj 3165 (最小割,最大点权独立集)

    胡伯涛的<最小割模型在信息学竞赛中的应用>写的真牛. 这道题是选择一些男孩和女孩参加party,邀请的男孩女孩之间不能有 8g,图就是个明显的二分图,就是选择一些点之间没有8g关系,就是二 ...

  10. linux vi 编辑器命令

    游标控制 h 游标向左移 j 游标向下移 k 游标向上移 l (or spacebar) 游标向右移 w 向前移动一个单词 b 向后移动一个单词 e 向前移动一个单词,且游标指向单词的末尾 ( 移到当 ...