筛选DataTable行重复
1 /// <summary> 2 /// 验证Datatable是否已经实例 3 /// </summary> 4 /// <param name="dt"></param> 5 /// <returns></returns> 6 private bool Checkdt(DataTable dt) 7 { 8 if (dt == null) 9 { 10 MessageBox.Show("参数Datatable未实例化"); 11 return false; 12 } 13 else 14 return true; 15 } 16 /// <summary> 17 /// 验证传入筛选列是否属于欲筛选Datatable 18 /// </summary> 19 /// <param name="dt"></param> 20 /// <param name="fieldname"></param> 21 /// <returns></returns> 22 private bool Checkfieldname(DataTable dt,string[] fieldname) 23 { 24 int flag=0; 25 for (int i = 0; i < fieldname.Length; i++) 26 { 27 string strfieldname = fieldname[i]; 28 for (int j= 0; j < dt.Columns.Count; j++) 29 { 30 string colname = dt.Columns[j].ColumnName; 31 if (strfieldname == colname) 32 flag++; 33 } 34 } 35 if (flag == fieldname.Length) 36 { 37 return true; 38 } 39 else 40 { 41 MessageBox.Show("存在不属于参数Datatable的列"); 42 return false; 43 } 44 } 45 /// <summary> 46 /// fieldname的传入顺序会影响结果 47 /// 如果dt有主键可以传入主键用来筛选 48 /// 出dt中不同记录 49 /// </summary> 50 /// <param name="dt"></param> 51 /// <param name="fieldname"></param> 52 /// <returns></returns> 53 private DataTable dtfiter(DataTable dt,string[] fieldname) 54 { 55 if (Checkdt(dt) && Checkfieldname(dt,fieldname)) 56 { 57 for (int k = 0; k < fieldname.Length; k++) 58 { 59 for (int i = 0; i < dt.Rows.Count; i++) 60 { 61 string dti = dt.Rows[i][fieldname[k]].ToString(); 62 for (int j = 0; j < dt.Rows.Count; j++) 63 { 64 string dtj = dt.Rows[j][fieldname[k]].ToString(); 65 if (dti == dtj) 66 if (i != j && dti != string.Empty) 67 { 68 dt.Rows.Remove(dt.Rows[j]); 69 } 70 } 71 } 72 } 73 } 74 return dt; 75 } 76 private DataTable DifDatatable(DataTable dt) 77 { 78 List<int> samerow=new List<int>(); 79 int flag = 0; 80 List<DataRow> listdr = new List<DataRow>(); 81 for (int i = 0; i < dt.Rows.Count; i++) 82 { 83 DataRow dr = dt.Rows[i]; 84 for (int j = i+1; j < dt.Rows.Count; j++) 85 { 86 DataRow secdr = dt.Rows[j]; 87 for (int k = 0; k < dt.Columns.Count; k++) 88 { 89 if (dr[k].ToString() == secdr[k].ToString()) 90 flag++; 91 if (flag == dt.Columns.Count) 92 samerow.Add(j); 93 } 94 flag = 0; 95 } 96 } 97 IEnumerable<int> sameindex = samerow.Distinct(); 98 foreach (var item in sameindex) 99 { 100 listdr.Add(dt.Rows[item]);//记录dt中重复行 101 } 102 foreach (var item in listdr) 103 { 104 dt.Rows.Remove(item);//移除dt中重复行 105 } 106 return dt; 107 }