[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;
}
}
}
  

枚举

public 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 = ;
foreach (FieldInfo info in fields)
{
if (num == )
{
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 = ;
foreach (FieldInfo info in fields)
{
if (num == )
{
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 > )
{
EnumSignAttribute aa = (EnumSignAttribute)arr[];
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 > )
{
EnumSignAttribute aa = (EnumSignAttribute)arr[];
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#枚举自定义,用于数据绑定。的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. iOS自定义转场动画的实现

    iOS中熟悉的是导航栏中的push和pop这两种动画效果,在这里我们可以自己实现自己想要的一些转场动画 下面是我自己创建转场动画的过程 1.新建一个文件继承自NSObject ,遵循协议UIViewC ...

  9. enum枚举类

    枚举类可用于定义常量ch01 package edu.nf.demo.ch01; /** * * 枚举类型 */ public enum Color { /** * 红色 */ RED, /** * ...

随机推荐

  1. 如何制作gif动画,丰富自己的博客?

    不久前在博客园上看到有个哥们发表了一篇博客,其中使用了大量的动态的gif动画,感觉这种方法对于丰富博客内容非常有帮助,然后在网上搜索了一些关于制作gif动画的资料.我的方法不一定好,在这里仅作为抛砖引 ...

  2. JSON使用——获取网页返回结果是Json的代码

    public String getWebData(String strUrl){ String json = null; try { URL url = new URL(strUrl); HttpUR ...

  3. 让Laravel5支持memcache的方法

    Laravel5框架在Cache和Session中不支持Memcache,看清了是Memcache而不是Memcached哦,MemCached是支持的但是这个扩展真的是装的蛋疼,只有修改部分源码让其 ...

  4. 从零开始学JAVA(05)-连接数据库MSSQL(JDBC代码篇)

    MSSQL的JDBC驱动下载好以后就可以写代码了. 1.新建项目,项目名为SqlJdbc.新建类,类名为SqlTest,同时勾选public static void main(String[] arg ...

  5. web 项目 布在tomcat服务器上出现的问题小记

    1.mysql  安装前需要安装.net framework 框架 mysql  无法安装  最后一布,start server 服务起不来. 原因,为上一次mysql没有删除,干净,导入无法安装. ...

  6. double数值多时系统默认科学计数法解决方法

    比如 Double d = new Double("1234567890.12"); System.out.println("d:="+d); java.tex ...

  7. 问题集-- SQL 约束名不能重复

    今天看书整理笔记的时候,无意发现一个问题,记录下来: 前段时间做练习曾经创建过一个tbl_student的表,         create table tbl_student(            ...

  8. 结合源码看nginx-1.4.0之nginx全局变量ngx_cycle初始化详解

    目录 0. 摘要 1. ngx_cycle_t结构设计 2. ngx_cycle_t数据结构 3. nginx全局变量ngx_cycle初始化 4. 小结 5. 参考资料 0. 摘要 Nginx核心的 ...

  9. iOS 中的加密方式

    iOS 中的加密方式 1 加密方式主要有: Base64,MD5,RSA,DES,AES,钥匙串存储,Cookie 2 各加密方式的比较 2.1 Base64 2.1.1 基本原理:采用64个基本的 ...

  10. [iOS Xcode8]上传AppStore无法添加构建版本

    最近升级到xcode8了,也遇到了一些问题.最近产品需要更新版本,按照以前的流程,我觉得so easy啊,万万没想到啊,这次更新版本差点让我吐血,来来回回不下七次. 首先问题是版本通过xcode上传到 ...