根据反射获取属性信息并创建DataTable
查看了一些方法之后,做了一些总结,此方法适用于传进的参数是List<T>类型,
但事先并不知道T的类型,T可以是自定义类型。
public DataTable CreateDataTable(Object o)
{
DataTable dt = new DataTable();
//DataColumn yearColumn = new DataColumn("Year", System.Type.GetType("System.String"));
//DataColumn monthColumn = new DataColumn("Month", System.Type.GetType("System.String"));
//dt.Columns.AddRange(new DataColumn[] { yearColumn, monthColumn});
//foreach (DateModel date in dlist)
//{
// DataRow newRow = dt.NewRow();
// newRow["Year"] = date.year;
// newRow["Month"] = date.month;
// dt.Rows.Add(newRow);
//}
//Type testType = typeof(DateModel); Type testType = o.GetType();
Type t = o.GetType().GetGenericArguments()[];
//object genericList = CreateGeneric(typeof(List<>), o.GetType().GetGenericArguments()[0]);
//genericList.GetType().InvokeMember("Add", BindingFlags.Default | BindingFlags.InvokeMethod, null, genericList, new Object[] { o});
////Type testType = typeof(CreateDataTableUtil);
//Assembly assembly = testType.Assembly;
//string name = assembly.FullName;//name = "WindowsFormsApplication6, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" //Type[] typeList = assembly.GetTypes(); // 获取类型
// // 针对每个类型获取详细信息 PropertyInfo[] propertys = t.GetProperties(); foreach (PropertyInfo pro in propertys)
{
DataColumn dc = new DataColumn();
dc = dt.Columns.Add(pro.Name, System.Type.GetType(pro.PropertyType.FullName));
}
IEnumerable list = o as IEnumerable;
foreach (Object obj in list)
{
DataRow newRow = dt.NewRow();
for (int i = ; i < propertys.Count(); i++)
{
newRow[dt.Columns[i]] = obj.GetType().GetProperty(dt.Columns[i].ToString()).GetValue(obj);
} dt.Rows.Add(newRow);
}
return dt;
//}
//public static object CreateGeneric(Type generic, Type innerType, params object[] args)
//{
// Type specificType = generic.MakeGenericType(new System.Type[] { innerType });
// return Activator.CreateInstance(specificType, args);
}
}
根据反射获取属性信息并创建DataTable的更多相关文章
- C#反射 获取程序集信息和通过类名创建类实例(转载)
C#反射获取程序集信息和通过类名创建类实例 . System.Reflection 命名空间:包含通过检查托管代码中程序集.模块.成员.参数和其他实体的元数据来检索其相关信息的类型. Assembly ...
- 利用Java反射根据类的名称获取属性信息和父类的属性信息
代码: import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java ...
- c#反射机制学习和利用反射获取类型信息
反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等.还可以获得每个成员的 ...
- 定义通用的可通过lambda表达式树来获取属性信息
我们一般获取某个类型或对象的属性信息均采用以下几种方法: 一.通过类型来获取属性信息 var p= typeof(People).GetProperty("Age");//获取指定 ...
- C# 反射获取属性值、名称、类型以及集合的属性值、类型名称
实体类 class Product { public string Id { get; set; } public string Name { get; set; } public List<P ...
- 反射获取属性DisplayName特性名字以及属性值
/// <summary> /// 反射获取所有DisplayName标记值 /// </summary> /// <typeparam name="T&quo ...
- Java反射学习-3 - 反射获取属性,方法,构造器
package cn.tx.reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import ...
- C# 反射获取属性类型及属性值,两个实体转换
一.两个实体数据转换 /// <summary> /// 为属性赋值 /// </summary> /// <typeparam name="T"&g ...
- 6、Linux基础--文件类型、属性信息、创建用户与用户组
笔记 1.晨考 1.解析映射文件 /etc/hosts 2.磁盘挂载文件 /etc/fstab 3.设置开机自启动脚本的步骤 1.修改/etc/rc.local 2.设置可执行权限 chmod +x ...
随机推荐
- js/css 检测移动设备方向的变化 判断横竖屏幕
js/css 检测移动设备方向的变化 判断横竖屏幕 方法一:用触发手机的横屏和竖屏之间的切换的事件 window.addEventListener("orientationchange&qu ...
- jquery方法详解
jquery方法详解 http://www.365mini.com/doc
- 微软ajax组件
拖个listview 然后绑定数据源,对curd选项打勾,然后拖个scriptManager进来,在拉个updatepanel进来,在updatepanel中放入个contentTemplate,吧l ...
- core-site.xml配置项:hadoop.tmp.dir
hadoop.tmp.dir:A base for other temporary directories. 集群运行后,修改该配置项后,发现类似错误: -- ::, INFO org.apache. ...
- CentOS Apache服务器安装与配置
原文地址:http://www.linuxidc.com/Linux/2014-01/95256.htm 一.安装Apache程序,一般有三种安装方式: Apache在centos下httpd1.直接 ...
- Long,String类型的两个值进行比较,注意点!!!
一: . Long 类型指的是 java.util.Lang 对象,而不是基本类型 long (注意大小写)Java中如果使用 == 双等于比较对象,等于比较的是两个对象的内存地址,也就是比较两个对象 ...
- php 函数之 )_each()list()implode()explode()in_array()
<?php /* implode() 把数组组合成字符串 explode() 把字符串分割成数组 in_array() 检测内容是否在数组中 each()把数组元素拆分成新的数组 list() ...
- fltk demo
背景: 基于microwindows nano-X上面运行fltk demo,是nano-X API 预留的fltk接口. 运行环境及程序版本: microwindows-0.89pre8 (源文件必 ...
- SurfaceView的补充
1.什么时候使用:当自定义View需要频繁刷新,或者刷新数据比较大的时候,建议使用SurfaceView取代使用View 2.继承SurfaceView的并重写的步骤:①.继承SurfaceView类 ...
- class之cls
cls代表的是类本身,一般在静态方法中使用