/// <summary>
        /// 比较两个DataTable数据(结构相同)
        /// </summary>
        /// <param name="dtDest">企业数据</param>
        /// <param name="dtSrc">入库数据</param>
        /// <param name="dtRetAdd">重复数据的表存储</param>
        /// <param name="dtRetDel">不重复数据的表存储</param>
        public static void CompareDt(DataTable dtSrc, DataTable dtDest, out DataTable dtRetAdd, out DataTable dtRetDel)
        {
            //不重复表
            dtRetDel = dtSrc.Clone();
            //重复表
            dtRetAdd = dtRetDel.Clone();
            int dtcount = dtSrc.Rows.Count;  //数据表中数据
            int dtscount = dtDest.Rows.Count; //人员录入数据            if (dtcount < dtscount || dtcount == dtscount)
            {
                for (int i = 0; i < dtscount; i++)
                {
                    string barcode = dtDest.Rows[i][0].ToString();
                    for (int j = 0; j < dtcount; j++)
                    {
                        //用录入表跟数据表进行数据比对
                        if (barcode == dtSrc.Rows[j][0].ToString())
                        {
                            //比对成功 增加到成功表一条数据
                            dtRetAdd.Rows.Add(dtSrc.Rows[j].ItemArray);
                            break;
                        }
                        //else
                        //{
                        //    dtRetDel.Rows.Add(dtDest.Rows[j].ItemArray);
                        //}
                    }
                }
            }
            if (dtcount > dtscount)
            {
                for (int i = 0; i < dtcount; i++)
                {
                    string barcode = dtSrc.Rows[i][0].ToString();
                    for (int j = 0; j < dtscount; j++)
                    {
                        //用数据表跟录入表进行数据比对
                        if (barcode == dtDest.Rows[j][0].ToString())
                        {
                            //比对成功 增加到成功表一条数据
                            dtRetAdd.Rows.Add(dtDest.Rows[j].ItemArray);
                            break;
                        }
                        //else
                        //{
                        //    dtRetDel.Rows.Add(dtSrc.Rows[j].ItemArray);
                        //}
                    }
                }
            }
        }

解决方案 »

  1.   

    你要干嘛啊,比对啊,先遍历一个dataset,每取出一条,然后遍历另一个,对比,类似foreache(...)
    {
       //取出一条
       //遍历另一个
       foreach(...)
       { 
       }
    }
      

  2.   

    Datatable 怎么取出 它里边重复的数据 和不重复的数据。
      谁以前做过?
      

  3.   

     public static void CompareDt(DataTable dtSrc, DataTable dtDest, out DataTable dtRetAdd, out DataTable dtRetDel)
     {
         //不重复表
         dtRetDel = dtSrc.Clone();
         //重复表
         dtRetAdd = dtRetDel.Clone();
         DataTable dt = dtSrc.Clone();     DataColumn[] keys = new DataColumn[dtDest.Columns.Count];
         for (int i = 0; i < keys.Length; i++)
             keys[i] = dtDest.Columns[i];
         dtDest.PrimaryKey = keys;     foreach (DataRow row in dtSrc.Rows)
         {
             DataRow checkedRow = dtDest.Rows.Find(row.ItemArray);
             if (checkedRow != null)
             {
                 dtRetAdd.Rows.Add(row.ItemArray);
                 checkedRow.Delete();
             }
             else
                 dtRetDel.Rows.Add(row.ItemArray);
         }
         foreach (DataRow row in dtDest.Rows)
         {
             if (row.RowState != DataRowState.Deleted)
                 dtRetDel.Rows.Add(row.ItemArray);
         }
         dtDest.RejectChanges();
     }
      

  4.   

     DataTable dt = dtSrc.Clone(); 不要