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 }