BaoKai_202508_Wms_Jingwang_.../WMS.Common/SystemCommon.cs

886 lines
32 KiB
C#
Raw Permalink Normal View History

2025-08-24 21:52:42 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.Reflection;
using DevExpress.XtraBars;
using DevExpress.XtraEditors;
using System.Collections;
using System.IO;
namespace WMS.Common
{
/// <summary>
/// 静态方法处理类
/// 主要一些公共方法处理
/// </summary>
public class SystemCommon
{
/// <summary>
/// 根据当前年获取字符串
/// </summary>
/// <param name="year"></param>
/// <returns></returns>
public static string GetNowYear (string year)
{
string CodeYear = "";
if(int.Parse(year) <=2009)
{
CodeYear = year;
}
Dictionary<string, char> systemData = new Dictionary<string, char>();
int a = 2010;
for (char c = 'A'; c <= 'Z'; c++)
{
systemData.Add(a.ToString(),c);
a++;
if(a>=2031)
{
break;
}
}
int i = 1;
for(int j=2031;j<2039;j++ )
{
systemData.Add(j.ToString(), Convert.ToChar(i));
i++;
}
return systemData[year].ToString();
}
/// <summary>
/// 获取月份
/// </summary>
/// <param name="month"></param>
/// <returns></returns>
public static string GetNowMonth(string month)
{
string noInt = "1";
if(int.Parse(month)>10)
{
if(noInt=="10")
{
noInt = "A";
}
if(month=="11")
{
noInt = "B";
}
if (month == "12")
{
noInt = "C";
}
}
return noInt;
}
private const int MAX_NUMBER = 10000;
//#region 单件模式实例化类 返回当前子类
///// <summary>
/////实例话窗体类。返回一个窗体类
///// </summary>
///// <param name="nameForm"></param>
///// <returns></returns>
//public object Instance(string nameForm, string className, string FormId, ref int FrmIndex, string strAppPath)
//{
// DevExpress.XtraTab.XtraTabControl tab_list = ((DevExpress.XtraTab.XtraTabControl)(Application.OpenForms[FormId].Controls["FunRibbon"]));
// object objType = new object();
// for (int i = 0; i < tab_list.TabPages.Count; i++)
// {
// if (className == tab_list.TabPages[i].Name.ToString())
// {
// FrmIndex = i;
// return tab_list.TabPages[i];
// }
// }
// objType = (Form)System.Reflection.Assembly.LoadFile(strAppPath + "\\" + nameForm + ".dll").GetType(nameForm + "." + className).GetConstructor(System.Type.EmptyTypes).Invoke(null);
// return objType;
//}
//#endregion
/// <summary>
/// 写文件
/// </summary>
/// <param name="fileName"></param>
/// <param name="str"></param>
public static void WriteFile(string fileName,string str) {
//检测目录是否存在,不存在则创建
string directory = fileName.Substring(0,fileName.LastIndexOf("\\"));
if (!Directory.Exists(directory))
{
DirectoryInfo info = Directory.CreateDirectory(directory);
}
//创建一个文件(如果有进行覆盖),并且返回一个文件流(进行写入的)。
FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write);
//写入一个字符串
//讲一个字符串转换成字节数组(并且指名了编码方式和操作系统的方式是一样的)。
byte[] bytes = System.Text.Encoding.Default.GetBytes(str);
//将byte数组写入文件流。
fs.Write(bytes, 0, bytes.Length);
//关闭流
fs.Flush();
fs.Close();
}
/// <summary>
/// 字符串格式化 1,2,3----'1','2','3'
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string StringFormat(string str)
{
string strValue = "";
string[] arr = str.Split(',');
for (int i = 0; i < arr.Length; i++)
{
strValue = strValue + "'" + arr[i] + "',";
}
if (strValue != "")
strValue = strValue.Substring(0, strValue.Length - 1);
return strValue;
}
/// <summary>
/// 控制窗体控件是否可用
/// </summary>
/// <param name="FormId">窗体ID</param>
/// <param name="ControlId">控件ID</param>
/// <param name="Enabled">True</param>
/// <param name="dtFun">功能菜单结果集</param>
/// <param name="Menu_Id">菜单ID</param>
/// <param name="FunName">功能名称</param>
public static void FunControlEnabled(string FormId, bool Enabled
, DataTable dtFun, string Menu_Id, string FunName)
{
DataRow[] dr = dtFun.Select("MENU_ID = '" + Menu_Id + "'");
for (int i = 0; i < dr.Length; i++)
{
string[] arr = FunName.Split(':');
for (int j = 0; j < arr.Length; j++)
{
if (dr[i]["FUN_NAME"].ToString().Trim() == arr[j].Trim())
{
ControlEnabled("FrmSysFrame", dr[i]["FUN_ID"].ToString(), Enabled);
}
}
}
}
/// <summary>
/// 控制窗体控件是否可用
/// </summary>
/// <param name="FormId">窗体ID</param>
/// <param name="ControlId">控件ID</param>
/// <param name="Enabled">True</param>
public static void ControlEnabled(string FormId, string ControlId, bool Enabled)
{
DevExpress.XtraBars.Ribbon.RibbonControl FunRibbon = ((DevExpress.XtraBars.Ribbon.RibbonControl)(Application.OpenForms[FormId].Controls["FunRibbon"]));
for (int i = 0; i < FunRibbon.Pages.Count; i++)
{
for (int j = 0; j < FunRibbon.Pages[i].Groups.Count; j++)
{
for (int k = 0; k < FunRibbon.Pages[i].Groups[j].ItemLinks.Count; k++)
{
for (int h = 0; h < FunRibbon.Pages[i].Groups[j].ItemLinks[k].Links.Count; h++)
{
BarButtonItem btn = ((DevExpress.XtraBars.BarButtonItemLink)(FunRibbon.Pages[i].Groups[j].ItemLinks[k].Links[h])).Item;
if (btn.Name == ControlId)
{
btn.Enabled = Enabled;
return;
}
}
}
}
}
}
/// <summary>
/// 弹出错误提示信息,标题为“错误”
/// </summary>
/// <param name="errorInfoString">错误信息</param>
public static void ShowErrorMessageBox(string errorInfoString)
{
XtraMessageBox.Show(errorInfoString, "错误", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1);
// MessageBox.Show(errorInfoString, "错误", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1);
}
/// <summary>
/// 弹出提示信息,标题为“提示”
/// </summary>
/// <param name="errorInfoString">提示信息</param>
public static void ShowInfoMessageBox(string infoString)
{
XtraMessageBox.Show(infoString, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
//MessageBox.Show(infoString, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1);
}
/// <summary>
/// 弹出返回是与否信息,标题为“确认” OKCancel
/// </summary>
/// <param name="errorInfoString">提示信息</param>
public static DialogResult ShowMessageBoxResult(string infoString)
{
return XtraMessageBox.Show(infoString, "系统提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button2);
//MessageBox.Show(infoString, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1);
}
/// <summary>
/// 弹出返回是否以及取消信息,标题为“确认”
/// </summary>
/// <param name="errorInfoString">提示信息</param>
public static DialogResult ShowMessageBoxResultCancel(string infoString)
{
return XtraMessageBox.Show(infoString, "系统提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button2);
//MessageBox.Show(infoString, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1);
}
/// <summary>
/// 判断当前输入是否为正整数
/// </summary>
/// <param name="input">Input</param>
/// <returns></returns>
public static bool IsPositiveInteger(string input)
{
return Regex.IsMatch(input, @"^\d{1,9}$");
}
/*
/// <summary>
/// 判断当前输入是否为整数(可以为负数)
/// </summary>
/// <param name="input">Input</param>
/// <returns></returns>
public static bool IsInteger(string input)
{
return Regex.IsMatch(input, @"^-?\d{1,9}$");
}*/
/// <summary>
/// 判断当前输入是否为正整数或正浮点数
/// </summary>
/// <param name="input">Input</param>
/// <returns></returns>
public static bool IsPositiveFloat(string input)
{
return Regex.IsMatch(input, @"^(0|[1-9]\d{0,8})(.\d{0,4})?$");
// 可以是 1.00
// @"^(\+|-)?(0|[1-9]\d*)(.\d*)?$" 任意实数
// @"^(0|[1-9]\d*)(.\d*[1-9])?$" 不可以是1.00
}
#region yyyy.MM
/// <summary>
/// 判断当前输入是否为正确的出版年月格式yyyy.MM
/// </summary>
/// <param name="input">Input</param>
/// <returns></returns>
public static bool IsRightPublishDate(string input)
{
return Regex.IsMatch(input, @"^[1-9]\d{3}.(0[1-9]|1[0-2])$");
}
#endregion
#region DataTable
/// <summary>
/// 合并相同结构的两个DataTable
/// </summary>
/// <param name="originalDt">原DataTable</param>
/// <param name="aimDt">目的DataTable</param>
/// <returns></returns>
public static System.Data.DataTable DataTableAdd(System.Data.DataTable originalDt, System.Data.DataTable aimDt)
{
foreach (DataRow dr in originalDt.Rows)
{
aimDt.ImportRow(dr);
}
aimDt.AcceptChanges();
return aimDt;
}
#endregion
#region 10ISBN转换为13位ISBN
/// <summary>
/// 将10位ISBN转换为13位ISBN
/// </summary>
/// <param name="inputValue">10位ISBN</param>
/// <returns></returns>
public static string ConvertIsbn(string inputValue)
{
string outValue = inputValue.Trim().Replace("X", "x");
if (!Regex.IsMatch(outValue, @"^[7]\d{8}([x]|\d{1})$"))
{
return inputValue;
}
int flag1;
if (outValue.EndsWith("x"))
{
flag1 = 10;
}
else if (outValue.EndsWith("0"))
{
flag1 = 11;
}
else
{
flag1 = int.Parse(outValue.Substring(9, 1));
}
char[] valueChar = outValue.Substring(0, 9).ToCharArray();
int flag2 = 0;
int i = 0;
foreach (char a in valueChar)
{
i++;
flag2 += int.Parse(a.ToString()) * (11 - i);
}
if (flag1 != (11 - (flag2 % 11)))
{
return inputValue;
}
//重算校验码
int bit1 = 0;
int bit2 = 0;
outValue = "978" + outValue.Substring(0, 9);
valueChar = outValue.ToCharArray();
i = 0;
foreach (char a in valueChar)
{
if ((i % 2) == 0)
{
//奇数位
bit2 += int.Parse(a.ToString());
}
else
{
//偶数位
bit1 += int.Parse(a.ToString());
}
i++;
}
int bit = bit1 * 3 + bit2;
bit = 10 - (bit % 10);
if (bit == 10)
{
bit = 0;
}
outValue += bit;
return outValue;
}
#endregion
#region MAX_NUMBER
public static bool IsMoreThanMaxNumber(int number)
{
return number > MAX_NUMBER;
}
#endregion
#region DataTable
public static System.Data.DataTable GetDataTableFT(int from, int length, System.Data.DataTable dt, out bool flag)
{
flag = false;
DataTable newdt = new DataTable();
newdt = dt.Clone();
if (from < dt.Rows.Count)
{
int i;
for (i = from; i < from + length; i++)
{
if (i < dt.Rows.Count)
{
newdt.ImportRow(dt.Rows[i]);
}
else
{
flag = true;
break;
}
}
if (i == dt.Rows.Count)
{
flag = true;
}
}
return newdt;
}
#endregion
#region isbn是否正确 1-12
/// <summary>
/// 校验isbn是否正确 1-12位的数值其中偶数、奇数各自相加根据偶数、奇数的和
/// </summary>
/// <param name="as_isbn"></param>
/// <returns></returns>
public static bool of_checkisbn(string as_isbn)
{
// 判断校验位是否正确
string ls_temp_isbn = as_isbn.Trim();
if (ls_temp_isbn.Trim().Length != 13 || ls_temp_isbn.Trim().Substring(0, 3) != "978")
{
return false;
}
int li_sum_js = 0; // 奇数和
int li_sum_os = 0; // 偶数和
int li_avg_ys = 0; // 余数
int li_bit_isbn = 0; // UNIT的isbn
int li_bit_check = 0; // 检测位
for (int i = 1; i <= 12; i++)
{
li_bit_isbn = int.Parse(ls_temp_isbn.Substring(i - 1, 1));
if (i % 2 == 0)
{
li_sum_os = li_sum_os + li_bit_isbn; // 偶数位相加
}
else
{
li_sum_js = li_sum_js + li_bit_isbn; // 奇数位相加
}
}
li_avg_ys = (li_sum_js + li_sum_os * 3) % 10;
li_bit_check = 10 - li_avg_ys; // 用10 - 所求余数,得到校验位
if (li_bit_check == 10) { li_bit_check = 0; } // 如果等于10的话则视为0
string ls_bit_right = ls_temp_isbn.Substring(12, 1); // 取最后一位
if (li_bit_check.ToString() != ls_bit_right)
{
return false;
}
else
{
return true;
}
}
#endregion
/// <summary>
/// MisCtrlTextBox回车验证
/// </summary>
/// <param name="e"></param>
/// <param name="textBox"></param>
public static void TextBoxKeyDown(TextBox textBox)
{
if (GetValResult(textBox))
{
SendKeys.Send("{TAB}");
}
}
/// <summary>
/// MisCtrlTextBox 离开验证
/// </summary>
/// <param name="textBox"></param>
public static void TextBoxLeave(TextBox textBox)
{
GetValResult(textBox);
}
private static bool GetValResult(TextBox textBox)
{
if (textBox.Text.Length != 0 && textBox.Text.Length > textBox.Text.Length)
{
ShowErrorMessageBox("文本长度不能大于" + textBox.Text.Length.ToString() + "");
//MessageBox.Show("文本长度不能大于" + textBox.StrLen.ToString() + "");
return false;
}
string msg = "";
//if (!Check(textBox.Text, ref msg))
//{
// ShowErrorMessageBox(textBox.Text.ToString() + "输入错误!");
// textBox.Text = "";
// textBox.Focus();
// return false;
//}
return true;
}
#region
//string pattern;
public static bool Check(TextBox textBox, ref string msg)
{
string pattern;
switch (textBox.Text.ToString())
{
//case "无://无
// return true;
// break;
case "整数"://整数
msg = "整数";
pattern = @"^-?[1-9]\d*$";
break;
case "正整数"://正整数
msg = "正整数";
pattern = "^[0-9]*[1-9][0-9]*$";
break;
case "负整数"://负整数
msg = "负整数";
pattern = "^-[0-9]*[1-9][0-9]*$";
break;
case "数字"://数字
msg = "数字";
pattern = "^([+-]?)\\d*\\.?\\d+$";
break;
case "电话"://电话
msg = "电话";
//在做项目时常常用到判断电话号码的正则表达式写了一个可验证如下27种格式
//110
//8888888
//88888888
//8888888-123
//88888888-23435
//0871-8888888-123
//023-88888888-23435
//86-0871-8888888-123
//8888888_123
//88888888_23435
//0871_8888888_123
//023_88888888_23435
//86_0871_8888888_123
//8888888123
//8888888823435
//08718888888123
//0238888888823435
//8608718888888123
//8888888—123
//88888888—23435
//0871—8888888—123
//023—88888888—23435
//86—0871—8888888—123
//13588888888
//15988888888
//013588888888
//015988888888
//(0315)7663551
pattern = @"((^(\d{2,4}[-_—]?)?\d{3,8}([-_—]?\d{3,8})?([-_—]?\d{1,7})?$)|(^0?1[35]\d{9}$)z)|(^(\([0-9]+\))?[0-9]{7,8}$)";
break;
case "正数"://正数(正整数+ 0
msg = "正数(正整数+ 0";
pattern = @"^\d+$";
break;
case "负数"://负数(负整数+ 0
msg = "负数(负整数+ 0";
pattern = @"^((-\d+)|(0+))$";
break;
case "浮点数"://浮点数
msg = "浮点数";
pattern = @"^(-?\d+)(\.\d+)?$";
break;
case "正浮点数"://正浮点数
msg = "正浮点数";
pattern = @"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$";
break;
case "负浮点数"://负浮点数
msg = "负浮点数";
pattern = @"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$";
break;
case "浮点数2"://浮点数
msg = "浮点数";
pattern = "^-?([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*|0?.0+|0)$";
break;
case "非负浮点数"://非负浮点数(正浮点数+ 0
msg = "非负浮点数(正浮点数+ 0";
pattern = @"^\d+(\.\d+)?$";
break;
case "非正浮点数"://非正浮点数(负浮点数+ 0
msg = "非正浮点数(负浮点数+ 0";
pattern = @"^((-\d+(\.\d+)?)|(0+(\.0+)?))$";
break;
case "邮件"://邮件 //正确
msg = "邮件";
pattern = @"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$";
break;
case "颜色"://颜色
msg = "颜色";
pattern = "^[a-fA-F0-9]{6}$";
break;
case "url"://url(http格式的)
msg = "url(http格式的)";
pattern = @"http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?";
break;
case "中文"://仅中文
msg = "中文";
pattern = @"[\u4e00-\u9fa5]";
break;
case "ACSII字符"://仅ACSII字符
msg = "ACSII字符";
pattern = "^[\\x00-\\xFF]+$";
break;
case "邮编"://邮编
msg = "邮编";
pattern = "^\\d{6}$";
break;
case "手机"://手机
msg = "手机";
pattern = "^[1]+[3,5,8,4]+\\d{9}";
break;
case "IP地址"://ip地址
msg = "IP地址";
pattern = @"^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$";
break;
case "非空"://非空
msg = "非空";
pattern = "^\\S+$";
break;
case "图片"://图片
msg = "图片";
pattern = @"(.*)\.(jpg|gif|png|bmp)$";
break;
case "压缩文件"://压缩文件
msg = "压缩文件";
pattern = "(.*)\\.(rar|zip|7zip|tgz)$";
break;
case "日期"://日期
msg = "日期";
//这个日期正则表达式支持
//YYYY-MM-DD
//YYYY/MM/DD
//YYYY_MM_DD
//YYYY.MM.DD的形式
pattern = @"((^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(10|12|0?[13578])([-\/\._])(3[01]|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(11|0?[469])([-\/\._])(30|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(0?2)([-\/\._])(2[0-8]|1[0-9]|0?[1-9])$)|(^([2468][048]00)([-\/\._])(0?2)([-\/\._])(29)$)|(^([3579][26]00)([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][0][48])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][0][48])([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][2468][048])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][2468][048])([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][13579][26])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][13579][26])([-\/\._])(0?2)([-\/\._])(29)$))";
break;
case "QQ号码"://QQ号码
msg = "QQ号码";
pattern = "[1-9][0-9]{4,}";
break;
case "用户名"://用来用户注册。匹配由数字、个英文字母或者下划线组成的字符串
msg = "用户名匹配由数字、个英文字母或者下划线组成的字符串";
pattern = "^(?!\\d)[a-zA-Z0-9_\\u4e00-\\u9fa5]+$";
break;
case "字母"://字母
msg = "字母";
pattern = "^[A-Za-z]+$";
break;
case "大写字母"://大写字母
msg = "大写字母";
pattern = "^[A-Z]+$";
break;
case "小写字母"://小写字母
msg = "小写字母";
pattern = "^[a-z]+$";
break;
case "身份证"://身份证
msg = "身份证";
//pattern = @"^[1-9]([0-9]{16}|[0-9]{13})[xX0-9]$";
pattern = "(^\\d{18}$)|(^\\d{15}$)";
break;
default:
pattern = string.Empty;
break;
}
return Regex.IsMatch(textBox.Text, pattern);
}
#endregion
//public static void GridColumnWidth(DevExpress.XtraGrid.Views.Grid.GridView gridView)
//{
// for (int i = 0; i < gridView.Columns.Count; i++)
// {
// gridView.Columns[i].BestFit();
// }
//}
/// <summary>
/// 提取字符串中的数字字符串
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string GetNumber(ref string str)
{
string returnStr = string.Empty;
returnStr = Regex.Replace(str, "[a-z,A-Z]", "", RegexOptions.IgnoreCase);
str = Regex.Replace(str, "[0-9]", "", RegexOptions.IgnoreCase);
return returnStr;
//string returnStr = string.Empty;
//for (int i = 0; i < str.Length; i++)
//{
// if (Char.IsNumber(str, i) == true)
// {
// string sdfsdfsd = str.Substring(i, 1);
// returnStr += str.Substring(i, 1);
// }
// else
// {
// string sss = str.Substring(i, 1);
// if (str.Substring(i, 1) == "A" || str.Substring(i, 1) == " ")
// {
// returnStr += str.Substring(i, 1);
// }
// }
//}
//return returnStr;
}
}
public class ConvertHelper<T> where T :class, new()
{
/// <summary>
/// 利用反射和泛型
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static List<T> ConvertToList(DataTable dt)
{
// 定义集合
List<T> ts = new List<T>();
try
{
// 获得此模型的类型
Type type = typeof(T);
//定义一个临时变量
string tempName = string.Empty;
///列的属性Status是否改变
bool typeChange = false;
DataTable resutTable = dt.Clone();
foreach (DataColumn clmn in resutTable.Columns)
{
PropertyInfo[] propertys = type.GetProperties();
//遍历该对象的所有属性
foreach (PropertyInfo pi in propertys)
{
if (pi.Name.ToUpper() == clmn.ColumnName.ToUpper())
{
if (pi.PropertyType != clmn.DataType)
{
clmn.DataType = pi.PropertyType;
typeChange = true;
continue;
}
}
}
}
if (typeChange)
{
foreach (DataRow dr in dt.Rows)
{
DataRow row = resutTable.NewRow();
try
{
foreach (DataColumn clm in dt.Columns)
{
row[clm.ColumnName] = dr[clm.ColumnName];
}
}
catch (Exception ex)
{
}
resutTable.Rows.Add(row);
resutTable.AcceptChanges();
}
}
else
{
resutTable = dt.Copy();
}
//遍历DataTable中所有的数据行
foreach (DataRow dr in resutTable.Rows)
{
T t = new T();
// 获得此模型的公共属性
PropertyInfo[] propertys = t.GetType().GetProperties();
//遍历该对象的所有属性
foreach (PropertyInfo pi in propertys)
{
tempName = pi.Name;//将属性名称赋值给临时变量
//检查DataTable是否包含此列列名==对象的属性名)
if (dt.Columns.Contains(tempName))
{
Type v = pi.PropertyType;
// 判断此属性是否有Setter
if (!pi.CanWrite) continue;//该属性不可写,直接跳出
//取值
object value = dr[tempName];
if (v != dr[tempName].GetType())
{
}
//如果非空,则赋给对象的属性
if (value != DBNull.Value)
pi.SetValue(t, value, null);
}
}
//对象添加到泛型集合中
ts.Add(t);
}
}
catch (Exception ex)
{
}
return ts;
}
/// <summary>
/// 将集合类转换成DataTable
/// </summary>
/// <param name="list">集合</param>
/// <returns></returns>
public static DataTable ToDataTable(IList<T> list)
{
DataTable result = new DataTable();
if (list.Count > 0)
{
PropertyInfo[] propertys = list[0].GetType().GetProperties();
foreach (PropertyInfo pi in propertys)
{
result.Columns.Add(pi.Name, pi.PropertyType);
}
for (int i = 0; i < list.Count; i++)
{
ArrayList tempList = new ArrayList();
foreach (PropertyInfo pi in propertys)
{
object obj = pi.GetValue(list[i], null);
tempList.Add(obj);
}
object[] array = tempList.ToArray();
result.LoadDataRow(array, true);
}
}
return result;
}
}
}