using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
using System.IO; namespace WinPropertyInfo
{ /// <summary>
/// Geovin Du
/// </summary>
public partial class Form1 : Form
{ /// <summary>
///
/// </summary>
/// <returns></returns>
DataTable setData()
{
Image img = Image.FromFile(@"C:\Documents and Settings\geovindu\My Documents\My Pictures\sqlanywhereODBC20180208160133.png"); DataTable dt = new DataTable();
dt.Columns.Add("MyName", typeof(string));
dt.Columns.Add("IsJob", typeof(bool));
dt.Columns.Add("Salary", typeof(float));
dt.Columns.Add("Bonus", typeof(double));
dt.Columns.Add("Insurance", typeof(decimal));
dt.Columns.Add("Age", typeof(int));
dt.Columns.Add("Photo", typeof(Image));
dt.Columns.Add("Birthaday", typeof(DateTime));
//dt.Columns.Add("", typeof(bool));
dt.Rows.Add("geovindu", true, -950, 1789.03, 78.09, 79, img, DateTime.Now);
dt.Rows.Add("塗聚文", true, -8950, 789.03, 5178.09, 29, img, DateTime.Now); return dt;
} /// <summary>
///
/// </summary>
public Form1()
{
InitializeComponent();
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_Load(object sender, EventArgs e)
{
List<GeovinDuInfo> list = new List<GeovinDuInfo>();
Image img = Image.FromFile(@"C:\Documents and Settings\geovindu\My Documents\My Pictures\sqlanywhereODBC20180208160133.png",false);
byte[] imgbyt = ToByteArray(img); try
{
//GeovinDuInfo info = new GeovinDuInfo();
//SetPropertyValue(info, "MyName", "geovindu");
//SetPropertyValue(info, "IsJob", true);
//SetPropertyValue(info, "Salary", -850);
//SetPropertyValue(info, "Bonus", 78.02);
//SetPropertyValue(info, "Insurance", 78.02);
//SetPropertyValue(info, "Age", 78);
//SetPropertyValue(info, "Photo", imgbyt); //不可賦值
//SetPropertyValue(info, "Birthaday", DateTime.Now);
//list.Add(info);
DataTable dt = setData();
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
GeovinDuInfo info = DataRowToModel(dt.Rows[i]);
list.Add(info);
}
} this.dataGridView1.DataSource = list;//setData();// }
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
} } /// <summary>
/// 賦值
/// </summary>
/// <param name="obj"></param>
/// <param name="propertyName"></param>
/// <param name="propertyValue"></param>
public static void SetPropertyValue(object obj, string propertyName, object propertyValue)
{
if (obj == null || string.IsNullOrEmpty(propertyName)) //IsNullOrWhiteSpace
{
return;
}
Type objectType = obj.GetType(); PropertyInfo propertyDetail = objectType.GetProperty(propertyName); if (propertyDetail != null && propertyDetail.CanWrite)
{
Type propertyType = propertyDetail.PropertyType; Type dataType = propertyType; // Check for nullable types
if (propertyType.IsGenericType && propertyType.GetGenericTypeDefinition() == typeof(Nullable<>))
{
// Check for null or empty string value.
if (propertyValue == null || string.IsNullOrEmpty(propertyValue.ToString()))
{
propertyDetail.SetValue(obj, null,null);
return;
}
else
{
dataType = propertyType.GetGenericArguments()[0];
}
} propertyValue = Convert.ChangeType(propertyValue, propertyType); propertyDetail.SetValue(obj, propertyValue,null); }
}
/// <summary>
///
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public bool ValidateData(object data)
{
foreach (PropertyInfo propertyInfo in data.GetType().GetProperties())
{
if (propertyInfo.PropertyType == typeof(string))
{
string value = propertyInfo.GetValue(data, null);
if (value == "geovindu")
{
return false;
} }
} return true;
}
/// <summary>
///
/// </summary>
/// <param name="row"></param>
/// <returns></returns>
public GeovinDuInfo DataRowToModel(DataRow row)
{
GeovinDuInfo model = new GeovinDuInfo();
if (row != null)
{
//利用反射获得属性的所有公共属性
Type modelType = model.GetType(); for (int i = 0; i < row.Table.Columns.Count; i++)
{
//查找实体是否存在列表相同的公共属性
PropertyInfo proInfo = modelType.GetProperty(row.Table.Columns[i].ColumnName); Type propertyType = proInfo.PropertyType; Type dataType = propertyType; if (proInfo != null && row[i] != DBNull.Value)
{
if (proInfo != null && proInfo.CanWrite)
{ }
if (dataType.Equals(typeof(Single))) //要考慮數据類型,否則會出錯
{
//propertyValue = Convert.ToSingle(propertyValue);
proInfo.SetValue(model, Convert.ToSingle(row[i], null)); //float類型轉換
}
else if (dataType.Equals(typeof(Double)))
{
proInfo.SetValue(model, Convert.ToDouble(row[i], null));
}
else if (dataType.Equals(typeof(Boolean)))
{
proInfo.SetValue(model, Convert.ToBoolean(row[i], null));
}
else if (dataType.Equals(typeof(Int32)))
{
proInfo.SetValue(model,Convert.ToInt32(row[i],null));
}
else if (dataType.Equals(typeof(Decimal)))
{
proInfo.SetValue(model, Convert.ToDecimal(row[i], null));
}
else
{
//proInfo.SetValue(model, Convert.ChangeType(row[i], propertyType), null);
proInfo.SetValue(model, row[i], null);//用索引值设置属性值 負數 float
} }
}
}
return model;
} /// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{ }
/// <summary>
///
/// </summary>
/// <param name="imageIn"></param>
/// <returns></returns>
public static byte[] ToByteArray(Image imageIn)
{
MemoryStream ms = new MemoryStream();
imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
return ms.ToArray();
} //Convert byte[] array to Image:
/// <summary>
///
/// </summary>
/// <param name="byteArrayIn"></param>
/// <returns></returns>
public static Image ToImage(byte[] byteArrayIn)
{
MemoryStream ms = new MemoryStream(byteArrayIn);
Image returnImage = Image.FromStream(ms);
return returnImage;
} }
/// <summary>
/// 塗聚文 涂聚文
/// Geovin Du
///
/// </summary>
public class GeovinDuInfo
{ private string _MyName = string.Empty;
/// <summary>
///
/// </summary>
public string MyName
{
get { return _MyName; }
set { _MyName = value; }
}
private bool _IsJob = true;
/// <summary>
///
/// </summary>
public bool IsJob
{
get { return _IsJob; }
set { _IsJob = value; }
} private float _Salary = 0;
/// <summary>
///
/// </summary>
public float Salary
{
get { return _Salary; }
set { _Salary = value; }
} private double _Bonus = 0.00;
/// <summary>
///
/// </summary>
public double Bonus
{
get { return _Bonus; }
set { _Bonus = value; }
} private decimal _Insurance;
/// <summary>
///
/// </summary>
public decimal Insurance
{
get { return _Insurance; }
set { _Insurance = value; }
} private int _Age = 0;
/// <summary>
///
/// </summary>
public int Age
{ get { return _Age; }
set { _Age = value; }
} private Image _Photo;
/// <summary>
///
/// </summary>
public Image Photo
{
get { return _Photo; }
set { _Photo = value; }
} private DateTime _Birthaday = DateTime.Now;
/// <summary>
///
/// </summary>
public DateTime Birthaday
{
get { return _Birthaday; }
set { _Birthaday = value; }
} } }

  

csharp: Setting the value of properties reflection的更多相关文章

  1. 无法识别的配置节点 applicationSettings/* Properties.Settings 解决方法

    http://blog.csdn.net/yaoxtao/article/details/7766888 在项目中引用web service时,偶然出现 无法识别的配置节点 applicationSe ...

  2. Learning WCF Chapter2 Data Contracts

    A data contract describes how CLR types map to XSD schema definitions. Data contracts are the prefer ...

  3. 关于C#你应该知道的2000件事

    原文 关于C#你应该知道的2000件事 下面列出了迄今为止你应该了解的关于C#博客的2000件事的所有帖子. 帖子总数= 1,219 大会 #11 -检查IL使用程序Ildasm.exe d #179 ...

  4. mybatis源码配置文件解析之二:解析settings标签

    在前边的博客中分析了mybatis解析properties标签,<mybatis源码配置文件解析之一:解析properties标签>.下面来看解析settings标签的过程. 一.概述 在 ...

  5. Android Studio 入门

    本文适用于从Eclipse转AndroidStudio的开发者 最近打算写一个系列的android初级开发教程,预计40篇以上的文章,结合我实际工作中的经验,写一些工作中经常用到的技术,让初学者可以少 ...

  6. Windows Service--Write a Better Windows Service

    原文地址: http://visualstudiomagazine.com/Articles/2005/10/01/Write-a-Better-Windows-Service.aspx?Page=1 ...

  7. Creating a SharePoint Sequential Workflow

    https://msdn.microsoft.com/en-us/library/office/hh824675(v=office.14).aspx Creating a SharePoint Seq ...

  8. zookeeper学习系列:四、Paxos算法和zookeeper的关系

    一.问题起源 淘宝搜索的博客 http://www.searchtb.com/2011/01/zookeeper-research.html  提到Paxos是zookeeper的灵魂 有一篇文章标题 ...

  9. SQL Server Analysis Services SSAS Processing Error Configurations

    转载:https://www.mssqltips.com/sqlservertip/3476/sql-server-analysis-services-ssas-processing-error-co ...

随机推荐

  1. ZOJ 3229 Shoot the Bullet (有源有汇有上下界最大流)

    题意:一个人要给女孩子们拍照,一共 n 天,m 个女孩子,每天他至多拍 d[i] 张照片,每个女孩子总共要被至少拍 g[i] 次.在第 i 天,可以拍 c[i] 个女孩子,c[i] 个女孩子中每个女孩 ...

  2. 向Word添加一段文本

    文档层次结构 [段落之后] 是一段连续文本,它定义具有一组常见属性的文本区域.一段连续文本由 r 元素表示,这样创建器便可组合换行.样式或格式设置属性,从而将相同信息应用于一段连续文本的所有部分. 正 ...

  3. linux、centos下安装配置vim

    ---恢复内容开始--- 1.一般情况下安装上centos后,会有vi,没有vim(以后可能会有吧) 如果不确定自己有没有vim,使用命令 rpm -qa|grep vim 查看,如果有的话,会显示三 ...

  4. vi显示中文乱码

    问题:vi/vim 编辑ANSI文本时,中文会显示乱码! 解决方法:修改vi/vim配置文件,添加如下红色并加粗的部分! vi    配置文件路径:/etc/vircvim 配置文件路径:/etc/v ...

  5. 在源文件(.c)和头文件(.h)中声明和定义的区别——C语言

    最近在看多文件编程的时候遇到的一个问题,本来以为理解了声明和定义的区别(然而并没有····),也算是重新认识了一次声明和定义,下面上代码 情形一:在源文件(.c)中 相信大部分读者对声明和定义的理解是 ...

  6. JavaScript基础-第2章

    目标 常用数据类型 基本语法 变量的定义与赋值 数据类型与转换 逻辑控制语句 条件语句 循环语句 函数定义 基本语法 变量 变量名以字母或下划线("_")开头 变量可以包含数字.从 ...

  7. IDEA快捷键整理

                                                                              IDEA快捷键整理 一.修改快捷键方法: 点击 Fi ...

  8. SQL 的单引号转义字符

    SQL 的转义字符是:'(单引号) 例:select * from user where name = '''06' 其中红色的单引号即表示转义字符,上例中 name的实际条件值为 '06,而不是 ' ...

  9. Liferay7 BPM门户开发之25: Liferay7应用程序配置(APPLICATION CONFIGURATION)

    首先有几个概念需要明确.1.第一个概念是这里的应用程序配置不是写XML之类的配置文件,是类似字典的类型化配置这意味着应用程序配置不只是一个字符串键值对的列表.值还可以有类型,如整数列表,字符串列表,一 ...

  10. java开发,年薪15W的你和年薪50W的他的差距

      在这个IT系统动辄就是上亿流量的时代,Java作为大数据时代应用最广泛的语言,诞生了一批又一批的新技术,包括HBase.Hadoop.MQ.Netty.SpringCloud等等 .   一些独角 ...