欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C# 如何去掉DataTable中的重复行

程序员文章站 2022-07-12 13:59:59
...
.net 1.1中的解决方法
1建立一个DataSetHelper类(DataSetHelper.cs)
 
public class DataSetHelper
  {
     public DataSet ds;
     public DataSetHelper(ref DataSet DataSet)
      {
         ds = DataSet;
     }
     public DataSetHelper()
      {
         ds = null;
     }
     private bool ColumnEqual(object A, object B)
      {
         if (A == DBNull.Value && B == DBNull.Value) //  both are DBNull.Value
             return true;
         if (A == DBNull.Value || B == DBNull.Value) //  only one is DBNull.Value
             return false;
         return (A.Equals(B));  // value type standard comparison
     }
     public DataTable SelectDistinct(string TableName, DataTable SourceTable, string FieldName)
      {
         DataTable dt = new DataTable(TableName);
         dt.Columns.Add(FieldName, SourceTable.Columns[FieldName].DataType);
 
         object LastValue = null;
         foreach (DataRow dr in SourceTable.Select("", FieldName))
          {
             if (LastValue == null || !(ColumnEqual(LastValue, dr[FieldName])))
              {
                 LastValue = dr[FieldName];
                  dt.Rows.Add(new object[] { LastValue });
             }
         }
         if (ds != null)
             ds.Tables.Add(dt);
         return dt;
     }
 }
 2 建立一个Web窗体,在page_load中写下面的代码
       
DataSet ds;
         DataSetHelper dsHelper;
         ds = new DataSet();
         dsHelper = new DataSetHelper(ref ds);
 
         // Create source table
         DataTable dt = new DataTable("Orders");
         dt.Columns.Add("EmployeeID", Type.GetType("System.String"));
         dt.Columns.Add("OrderID", Type.GetType("System.Int32"));
         dt.Columns.Add("Amount", Type.GetType("System.Decimal"));
 
          dt.Rows.Add(new object[] { "Sam", 5, 25.00 });
          dt.Rows.Add(new object[] { "Tom", 7, 50.00 });
          dt.Rows.Add(new object[] { "Sue", 9, 11.00 });
          dt.Rows.Add(new Object[] { "Tom", 12, 7.00 });
          dt.Rows.Add(new Object[] { "Sam", 14, 512.00 });
          dt.Rows.Add(new Object[] { "Sue", 15, 17.00 });
          dt.Rows.Add(new Object[] { "Sue", 22, 2.50 });
          dt.Rows.Add(new object[] { "Tom", 24, 3.00 });
          dt.Rows.Add(new object[] { "Tom", 33, 78.75 });
 
         ds.Tables.Add(dt);
        DataTable td=dsHelper.SelectDistinct("DistinctEmployees", ds.Tables["Orders"], "EmployeeID");
        this.GridView1.DataSource = td;
        this.GridView1.DataBind();
 ===========================================================================================
 .net 2.0中的解决方法
 
public DataTable GetTopSearch()
          {
             DataSet dsKeyword = dal.GetKeyword();
             DataSet dsTopSearch = new DataSet();
             for (int i = 0; i < 4; i++)
              {
                 string keyword = dsKeyword.Tables[0].Rows[i]["Name"].ToString();
                 string condition = dsKeyword.Tables[0].Rows[i]["SearchCondition"].ToString();
                 dsTopSearch.Merge(dal.GetTopSearch(keyword,condition));
             }
             return dsTopSearch.Tables[0].DefaultView.ToTable(true, "ID","Name","Author","Publisher","PublishDate","TypeName","Price","SalePrice","SavePrice","Rebate","ImagePath","ContentIntro");
         }
 

转载于:https://my.oschina.net/thinkgem/blog/713455