文章出處
文章列表
public class DataTableHelper { /// <summary> /// 給DataTable增加一個自增列 /// 如果DataTable 存在 identityid 字段 則 直接返回DataTable 不做任何處理 /// </summary> /// <param name="dt">DataTable</param> /// <returns>返回Datatable 增加字段 identityid </returns> public static DataTable AddIdentityColumn(DataTable dt) { if (!dt.Columns.Contains("identityid")) { dt.Columns.Add("identityid"); for (int i = 0; i < dt.Rows.Count; i++) { dt.Rows[i]["identityid"] = (i + 1).ToString(); } } return dt; } /// <summary> /// 檢查DataTable 是否有數據行 /// </summary> /// <param name="dt">DataTable</param> /// <returns></returns> public static bool IsHaveRows(DataTable dt) { if (dt != null && dt.Rows.Count > 0) return true; return false; } /// <summary> /// DataTable轉換成實體列表 /// </summary> /// <typeparam name="T">實體 T </typeparam> /// <param name="table">datatable</param> /// <returns></returns> public static IList<T> DataTableToList<T>(DataTable table) where T : class { if (!IsHaveRows(table)) return new List<T>(); IList<T> list = new List<T>(); T model = default(T); foreach (DataRow dr in table.Rows) { model = Activator.CreateInstance<T>(); foreach (DataColumn dc in dr.Table.Columns) { object drValue = dr[dc.ColumnName]; PropertyInfo pi = model.GetType().GetProperty(dc.ColumnName); if (pi != null && pi.CanWrite && (drValue != null && !Convert.IsDBNull(drValue))) { pi.SetValue(model, drValue, null); } } list.Add(model); } return list; } /// <summary> /// 實體列表轉換成DataTable /// </summary> /// <typeparam name="T">實體</typeparam> /// <param name="list"> 實體列表</param> /// <returns></returns> public static DataTable ListToDataTable<T>(IList<T> list) where T : class { if (list == null || list.Count <= 0) { return null; } DataTable dt = new DataTable(typeof(T).Name); DataColumn column; DataRow row; PropertyInfo[] myPropertyInfo = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance); int length = myPropertyInfo.Length; bool createColumn = true; foreach (T t in list) { if (t == null) { continue; } row = dt.NewRow(); for (int i = 0; i < length; i++) { PropertyInfo pi = myPropertyInfo[i]; string name = pi.Name; if (createColumn) { column = new DataColumn(name, pi.PropertyType); dt.Columns.Add(column); } row[name] = pi.GetValue(t, null); } if (createColumn) { createColumn = false; } dt.Rows.Add(row); } return dt; } /// <summary> /// 將泛型集合類轉換成DataTable /// </summary> /// <typeparam name="T">集合項類型</typeparam> /// <param name="list">集合</param> /// <returns>數據集(表)</returns> 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) { if (propertyNameList.Count == 0) { result.Columns.Add(pi.Name, pi.PropertyType); } else { if (propertyNameList.Contains(pi.Name)) { result.Columns.Add(pi.Name, pi.PropertyType); } } } 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; } /// <summary> /// 根據nameList里面的字段創建一個表格,返回該表格的DataTable /// </summary> /// <param name="nameList">包含字段信息的列表</param> /// <returns>DataTable</returns> public static DataTable CreateTable(List<string> nameList) { if (nameList.Count <= 0) return null; DataTable myDataTable = new DataTable(); myDataTable.TableName = "tableName";//增加一個默認的名字 foreach (string columnName in nameList) { myDataTable.Columns.Add(columnName, typeof(string)); } return myDataTable; } /// <summary> /// 通過字符列表創建表字段,字段格式可以是: /// 1) a,b,c,d,e /// 2) a|int,b|string,c|bool,d|decimal /// </summary> /// <param name="nameString"></param> /// <returns></returns> public static DataTable CreateTable(string nameString) { string[] nameArray = nameString.Split(new char[] { ',', ';' }); List<string> nameList = new List<string>(); DataTable dt = new DataTable(); dt.TableName = "tableName";//增加一個默認的名字 foreach (string item in nameArray) { if (!string.IsNullOrEmpty(item)) { string[] subItems = item.Split('|'); if (subItems.Length == 2) { dt.Columns.Add(subItems[0], ConvertType(subItems[1])); } else { dt.Columns.Add(subItems[0]); } } } return dt; } private static Type ConvertType(string typeName) { typeName = typeName.ToLower().Replace("system.", ""); Type newType = typeof(string); switch (typeName) { case "boolean": case "bool": newType = typeof(bool); break; case "int16": case "short": newType = typeof(short); break; case "int32": case "int": newType = typeof(int); break; case "long": case "int64": newType = typeof(long); break; case "uint16": case "ushort": newType = typeof(ushort); break; case "uint32": case "uint": newType = typeof(uint); break; case "uint64": case "ulong": newType = typeof(ulong); break; case "single": case "float": newType = typeof(float); break; case "string": newType = typeof(string); break; case "guid": newType = typeof(Guid); break; case "decimal": newType = typeof(decimal); break; case "double": newType = typeof(double); break; case "datetime": newType = typeof(DateTime); break; case "byte": newType = typeof(byte); break; case "char": newType = typeof(char); break; } return newType; } /// <summary> /// 獲得從DataRowCollection轉換成的DataRow數組 /// </summary> /// <param name="drc">DataRowCollection</param> /// <returns></returns> public static DataRow[] GetDataRowArray(DataRowCollection drc) { int count = drc.Count; DataRow[] drs = new DataRow[count]; for (int i = 0; i < count; i++) { drs[i] = drc[i]; } return drs; } /// <summary> /// 將DataRow數組轉換成DataTable,注意行數組的每個元素須具有相同的數據結構, /// 否則當有元素長度大于第一個元素時,拋出異常 /// </summary> /// <param name="rows">行數組</param> /// <returns></returns> public static DataTable GetTableFromRows(DataRow[] rows) { if (rows.Length <= 0) { return new DataTable(); } DataTable dt = rows[0].Table.Clone(); dt.DefaultView.Sort = rows[0].Table.DefaultView.Sort; for (int i = 0; i < rows.Length; i++) { dt.LoadDataRow(rows[i].ItemArray, true); } return dt; } /// <summary> /// 排序表的視圖 /// </summary> /// <param name="dt"></param> /// <param name="sorts"></param> /// <returns></returns> public static DataTable SortedTable(DataTable dt, params string[] sorts) { if (dt.Rows.Count > 0) { string tmp = ""; for (int i = 0; i < sorts.Length; i++) { tmp += sorts[i] + ","; } dt.DefaultView.Sort = tmp.TrimEnd(','); } return dt; } /// <summary> /// 根據條件過濾表的內容 /// </summary> /// <param name="dt"></param> /// <param name="condition"></param> /// <returns></returns> public static DataTable FilterDataTable(DataTable dt, string condition) { if (condition.Trim() == "") { return dt; } else { DataTable newdt = new DataTable(); newdt = dt.Clone(); DataRow[] dr = dt.Select(condition); for (int i = 0; i < dr.Length; i++) { newdt.ImportRow((DataRow)dr[i]); } return newdt; } } /// <summary> /// 轉換.NET的Type到數據庫參數的類型 /// </summary> /// <param name="t"></param> /// <returns></returns> public static DbType TypeToDbType(Type t) { DbType dbt; try { dbt = (DbType)Enum.Parse(typeof(DbType), t.Name); } catch { dbt = DbType.Object; } return dbt; } /// <summary> /// 使用分隔符串聯表格字段的內容,如:a,b,c /// </summary> /// <param name="dt">表格</param> /// <param name="columnName">字段名稱</param> /// <param name="append">增加的字符串,無則為空</param> /// <param name="splitChar">分隔符,如逗號(,)</param> /// <returns></returns> public static string ConcatColumnValue(DataTable dt, string columnName, string append, char splitChar) { string result = append; if (dt != null && dt.Rows.Count > 0) { foreach (DataRow row in dt.Rows) { result += string.Format("{0}{1}", splitChar, row[columnName]); } } return result.Trim(splitChar); } /// <summary> /// 使用逗號串聯表格字段的內容,如:a,b,c /// </summary> /// <param name="dt">表格</param> /// <param name="columnName">字段名稱</param> /// <param name="append">增加的字符串,無則為空</param> /// <returns></returns> public static string ConcatColumnValue(DataTable dt, string columnName, string append) { string result = append; if (dt != null && dt.Rows.Count > 0) { foreach (DataRow row in dt.Rows) { result += string.Format(",{0}", row[columnName]); } } return result.Trim(','); } /// <summary> /// 判斷表格是否包含指定的全部字段名稱,如果其中一個不符合則返回false /// </summary> /// <param name="dt">表格對象</param> /// <param name="columnString">字段列名稱,逗號分開</param> /// <returns></returns> public static bool ContainAllColumns(DataTable dt, string columnString) { bool result = true; if (dt != null && !string.IsNullOrEmpty(columnString)) { List<string> columnList = columnString.Split(',').ToList(); foreach (string columnName in columnList) { if (!string.IsNullOrEmpty(columnName) && !dt.Columns.Contains(columnName)) { result = false; } } } else { result = false; } return result; } }
文章列表
全站熱搜