DataTable操作相關內容:
對DataTable 的一些操作在dataTable中最容易想到的是用for循環來操作,但事實不到萬不得已是不會用for循環的,因為效率一般不高。
1、 取行-取行一般用rowfilterDataTable datSource;//數據源表
//過濾表
DataView davTemp = newDataView(datSource, "過濾條件", "排序字段", DataViewRowState.各種 狀態); //把過濾后的表賦給新表
DataTable datNew = davTemp.ToTable();
2、取表的某列或多列
//數據源表:DataTable datSource;
DataTable datNew= datSource.DefaultView.ToTable(false, new string[] { "列名", "列名" .....});
3、復制某行的值前提是表結構或列數相同
DataTable datSource;DataTable datNew;datSource.Rows[i].ItemArray= datNew. Rows[i].ItemArray;
4、表列數相同,但是卻列名不同,想復制值的方法:既然列數相同,只是列名不同,改變列名 如下:
DataTable datSource; DataTable datNew; datNew= datSource.Copy(); datNew.Columns["FirstColumn"].ColumnName = "YourColumnName";
//重命名列
dt.Columns["num"].ColumnName = "xxx";
5、調整列的位置SetOrdinal();
DataTable dat = new DataTable(); //添加三列 dat.Columns.Add("col1"); dat.Columns.Add("col2"); dat.Columns.Add("col3"); //添加一行數據 dat.Rows.Add(1,2,3); //把第三列放到第一的位置 dt.Columns["col3"].SetOrdinal(0); //把第二列放在第三個位置 dt.Columns["col2"].SetOrdinal(2); //把第一列放在第二個位置 dt.Columns["col1"].SetOrdinal(1);
6、Datatable轉List
調用此方法前,需要datatable列名和列數量與list中的實體類的字段名及數量相同
public class DtToList<T> where T : new() { /// <summary> /// datatable轉list /// </summary> /// <param name="dt"></param> /// <returns></returns> public static List<T> ConvertToModel(DataTable dt) { List<T> ts = new List<T>();// 定義集合 Type type = typeof(T); // 獲得此模型的類型 string tempName = ""; foreach (DataRow dr in dt.Rows) { T t = new T(); PropertyInfo[] propertys = t.GetType().GetProperties();// 獲得此模型的公共屬性 foreach (PropertyInfo pi in propertys) { tempName = pi.Name; if (dt.Columns.Contains(tempName)) { if (!pi.CanWrite) continue; object value = dr[tempName]; if (value != DBNull.Value) pi.SetValue(t, value, null); } } ts.Add(t); } return ts; } }
吆西吆西