[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. java 访问修饰符

    此题考察修饰符,函数定义等,故从网上搜罗了下相关资料,总结如下: 类.方法.成员变量和局部变量的可用修饰符 修饰符 类 成员访求 构造方法 成员变量 局部变量 abstract(抽象的) √ √ - ...

  2. docker镜像的操作

    在主机上列出镜像 sudo docker images 每从Docker Hub下载一个镜像就会启动相对的创建一个容器 在镜像列表中看到三个重要的东西: 来自什么镜像源,例如ubuntu 每个镜像都有 ...

  3. jquery相关代码

    1.jquery获取当前选中select的text值 var checkText=$("#slc1").find("option:selected").text ...

  4. Linux分区有损坏修复

    如果Linux分区有损坏情况,启动有问题,不能正常进入文本或图形界面.那么一般会出现提示,需要输入Root密码登录后采用fsck -t ext3 -r /usr/local 修复 , /usr/loc ...

  5. 1.7.6 Highlighting-高亮

    1 高亮 solr的高亮允许匹配用户查询的文档的片段包含在查询响应中返回,高亮包含在返回结果的单独部分(highlighting部分). solr提供了一个高亮工具的集合,这个工具允许控制大量字段的片 ...

  6. Android进阶笔记19:onInterceptTouchEvent、onTouchEvent与onTouch

    1.onTouch方法:onTouch方法是View的 OnTouchListener借口中定义的方法,处理View及其子类被touch是的事件处理.当一个View绑定了OnTouchLister后, ...

  7. uboot在s3c2440上的移植(1)

    一.移植环境 主  机:VMWare--Fedora 9 开发板:Mini2440--64MB Nand,Kernel:2.6.30.4 编译器:arm-linux-gcc-4.3.2.tgz u-b ...

  8. PF防火墙

    PF防火墙 点击认领       PF防火墙 ( 全称:Packet Filter ) 是 UNIX LIKE 系统上进行 TCP/IP 流量过滤和网络地址转换的软件系统.PF 同样也能提供 TCP/ ...

  9. hdu 3450 树状数组

    思路:二分查找位置,之后是裸的树状数组. #include<set> #include<map> #include<cmath> #include<queue ...

  10. Backbone.js学习之Router

    官方文档的解释: Web applications often provide linkable, bookmarkable, shareable URLs for important locatio ...