筛选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         }

 

你可能感兴趣的:(Datatable)