using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using System.ComponentModel;
|
using System.Data;
|
using System.Linq;
|
using System.Reflection;
|
using System.Text;
|
using System.Threading.Tasks;
|
using System.Windows.Forms;
|
using WZ.Useful.Commons;
|
|
|
namespace iWareCommon.Utils
|
{
|
public static class DataTableHelper
|
{
|
public static DataTable ToDataTable<T>(IList<T> list)
|
{
|
return ToDataTable<T>(list, null);
|
}
|
/// <summary>
|
/// 将泛型集合类转换成DataTable
|
/// </summary>
|
/// <typeparam name="T">集合项类型</typeparam>
|
/// <param name="list">集合</param>
|
/// <param name="propertyName">需要返回的列的列名</param>
|
/// <returns>数据集(表)</returns>
|
public static DataTable ToDataTable<T>(IList<T> list, params string[] propertyName)
|
{
|
List<string> propertyNameList = new List<string>();
|
if (propertyName != null)
|
propertyNameList.AddRange(propertyName);
|
|
DataTable result = new DataTable();
|
if (list.Count > 0)
|
{
|
PropertyInfo[] propertys = list[0].GetType().GetProperties();
|
foreach (PropertyInfo pi in propertys)
|
{
|
try
|
{
|
Type nullInt32 = typeof(Int32?);
|
Type classicInt32 = typeof(Int32);
|
if (propertyNameList.Count == 0)
|
{
|
//result.Columns.Add(pi.Name, pi.PropertyType);
|
var tmp = pi.PropertyType.UnderlyingSystemType.ToString();
|
result.Columns.Add(pi.Name, tmp.Contains("System.Nullable") ? classicInt32 : pi.PropertyType);
|
}
|
else
|
{
|
|
if (propertyNameList.Contains(pi.Name))
|
{
|
var tmp = pi.PropertyType.UnderlyingSystemType.ToString();
|
result.Columns.Add(pi.Name, tmp.Contains("System.Nullable") ? classicInt32 : pi.PropertyType);
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
MessageBox.Show(ex.ToString());
|
}
|
}
|
|
for (int i = 0; i < list.Count; i++)
|
{
|
ArrayList tempList = new ArrayList();
|
foreach (PropertyInfo pi in propertys)
|
{
|
if (propertyNameList.Count == 0)
|
{
|
object obj = pi.GetValue(list[i], null);
|
tempList.Add(obj);
|
}
|
else
|
{
|
if (propertyNameList.Contains(pi.Name))
|
{
|
object obj = pi.GetValue(list[i], null);
|
tempList.Add(obj);
|
}
|
}
|
}
|
object[] array = tempList.ToArray();
|
result.LoadDataRow(array, true);
|
}
|
}
|
return result;
|
}
|
public static void DataSetToExcel(DataTable ds)
|
{
|
string filePath = FileDialogHelper.SaveExcel();
|
WZ.Useful.Commons.ExcelHelper.DataSetToExcel(ds, filePath);
|
|
}
|
|
/// <summary>
|
/// 将linq查询转换为datatable
|
/// </summary>
|
/// <typeparam name="T"></typeparam>
|
/// <param name="array"></param>
|
/// <returns></returns>
|
public static DataTable CopyToDataTable<T>(IEnumerable<T> array)
|
{
|
if (array == null)
|
{
|
return null;
|
}
|
var ret = new DataTable();
|
foreach (PropertyDescriptor dp in TypeDescriptor.GetProperties(typeof(T)))
|
ret.Columns.Add(dp.Name);
|
|
foreach (T item in array)
|
{
|
var Row = ret.NewRow();
|
foreach (PropertyDescriptor dp in TypeDescriptor.GetProperties(typeof(T)))
|
Row[dp.Name] = dp.GetValue(item);
|
ret.Rows.Add(Row);
|
}
|
return ret;
|
}
|
|
|
/// <summary>
|
/// 根据列名,将linq查询转换为datatable
|
/// </summary>
|
/// <typeparam name="T"></typeparam>
|
/// <param name="array"></param>
|
/// <returns></returns>
|
public static DataTable CopyToDataTable<T>(IEnumerable<T> array, string[] columns, string[] columnNames)
|
{
|
if (array == null)
|
{
|
return null;
|
}
|
var ret = new DataTable();
|
foreach (var item in columnNames)
|
{
|
ret.Columns.Add(item);
|
}
|
|
foreach (T item in array)
|
{//遍历实体类中的每一个实体
|
var Row = ret.NewRow();
|
for (int i = 0; i < columns.Length; i++)
|
{
|
foreach (PropertyDescriptor dp in TypeDescriptor.GetProperties(typeof(T)))
|
{//遍历一个实体类的所有属性
|
if (dp.Name == columns[i])
|
{
|
Row[columnNames[i]] = dp.GetValue(item);
|
break;
|
}
|
}
|
}
|
ret.Rows.Add(Row);
|
}
|
return ret;
|
}
|
|
}
|
}
|