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(IList list) { return ToDataTable(list, null); } /// /// 将泛型集合类转换成DataTable /// /// 集合项类型 /// 集合 /// 需要返回的列的列名 /// 数据集(表) public static DataTable ToDataTable(IList list, params string[] propertyName) { List propertyNameList = new List(); 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); } /// /// 将linq查询转换为datatable /// /// /// /// public static DataTable CopyToDataTable(IEnumerable 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; } /// /// 根据列名,将linq查询转换为datatable /// /// /// /// public static DataTable CopyToDataTable(IEnumerable 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; } } }