[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. storm 分组

    Stream Groupings: Stream Grouping定义了一个流在Bolt任务间该如何被切分.这里有Storm提供的6个Stream Grouping类型: 1. 随机分组(Shuffl ...

  2. HTML与Servlet

    1.什么是servlet Servlet 是在服务器上运行的小程序.一个 Servlet 就是 Java 编程语言中的一个类,它被用来扩展服务器的性能,服务器上驻留着可以通过“请求-响应”编程模型来访 ...

  3. SOA与C#

    What is SOA? SOA or Service oriented architecture is an architecture style for building business app ...

  4. iOS开发-解决AVAudioRecorder录音文件无法保存的问题

    我们在开发iOS客户端APP时,有时候会用到录音的功能,一般会使 AVAudioRecorder 这个类.如下面这样: @interface MyViewController : UIViewCont ...

  5. 关于真机调试DDMS中的data文件夹打不开的解决方法

    关于真机调试DDMS中的data文件夹打不开的解决方法 今天在开发的时候需要导出程序中的数据库文件查看数据,数据库文件默认就在/data/data/应用包名/databases/数据库名 这个路径下, ...

  6. oracle PL/SQL(procedure language/SQL)程序设计之游标cursors

    游标 Cursors--Conception 每一条被Oracle服务器执行的SQL语句都有一个独立的游标与之相关联:隐式游标 Implicit cursors: 用于所有的DML和PL/SQL的SE ...

  7. 设置navigationBar上面的item

    //创建UIBarButtonItem UIBarButtonItem * rightButton = [[UIBarButtonItem alloc]initWithBarButtonSystemI ...

  8. 获取XML数据

    http://www.w3school.com.cn/xml/xml_elements.asp <?xml version="1.0" encoding="gb23 ...

  9. asp.net的简单分页程序

    *.apsx页面 1: <%@ Page Language="C#" Debug ="true" AutoEventWireup="true&q ...

  10. 二十一、Android上常见度量单位【xdpi、hdpi、mdpi、ldpi】解读

    术语和概念 屏幕尺寸 屏幕的物理尺寸,以屏幕的对角线长度作为依据(比如 2.8寸, 3.5寸). 简而言之, Android把所有的屏幕尺寸简化为三大类:大,正常,和小. 程序可以针对这三种尺寸的屏幕 ...