1建立一个DataSetHelper类(DataSetHelper.cs)
 public class DataSetHelper
public class DataSetHelper
 ...{
...{ public DataSet ds;
    public DataSet ds; public DataSetHelper(ref DataSet DataSet)
    public DataSetHelper(ref DataSet DataSet)
 ...{
    ...{ ds = DataSet;
        ds = DataSet; }
    } public DataSetHelper()
    public DataSetHelper()
 ...{
    ...{ ds = null;
        ds = null; }
    } private bool ColumnEqual(object A, object B)
    private bool ColumnEqual(object A, object B)
 ...{
    ...{ if (A == DBNull.Value && B == DBNull.Value) //  both are DBNull.Value
        if (A == DBNull.Value && B == DBNull.Value) //  both are DBNull.Value return true;
            return true; if (A == DBNull.Value || B == DBNull.Value) //  only one is DBNull.Value
        if (A == DBNull.Value || B == DBNull.Value) //  only one is DBNull.Value return false;
            return false; return (A.Equals(B));  // value type standard comparison
        return (A.Equals(B));  // value type standard comparison }
    } public DataTable SelectDistinct(string TableName, DataTable SourceTable, string FieldName)
    public DataTable SelectDistinct(string TableName, DataTable SourceTable, string FieldName)
 ...{
    ...{ DataTable dt = new DataTable(TableName);
        DataTable dt = new DataTable(TableName); dt.Columns.Add(FieldName, SourceTable.Columns[FieldName].DataType);
        dt.Columns.Add(FieldName, SourceTable.Columns[FieldName].DataType);
 object LastValue = null;
        object LastValue = null; foreach (DataRow dr in SourceTable.Select("", FieldName))
        foreach (DataRow dr in SourceTable.Select("", FieldName))
 ...{
        ...{ if (LastValue == null || !(ColumnEqual(LastValue, dr[FieldName])))
            if (LastValue == null || !(ColumnEqual(LastValue, dr[FieldName])))
 ...{
            ...{ LastValue = dr[FieldName];
                LastValue = dr[FieldName];
 dt.Rows.Add(new object[] ...{ LastValue });
                dt.Rows.Add(new object[] ...{ LastValue }); }
            } }
        } if (ds != null)
        if (ds != null) ds.Tables.Add(dt);
            ds.Tables.Add(dt); return dt;
        return dt; }
    } }
} DataSet ds;
       DataSet ds; DataSetHelper dsHelper;
        DataSetHelper dsHelper; ds = new DataSet();
        ds = new DataSet(); dsHelper = new DataSetHelper(ref ds);
        dsHelper = new DataSetHelper(ref ds);
 // Create source table
        // Create source table DataTable dt = new DataTable("Orders");
        DataTable dt = new DataTable("Orders"); dt.Columns.Add("EmployeeID", Type.GetType("System.String"));
        dt.Columns.Add("EmployeeID", Type.GetType("System.String")); dt.Columns.Add("OrderID", Type.GetType("System.Int32"));
        dt.Columns.Add("OrderID", Type.GetType("System.Int32")); dt.Columns.Add("Amount", Type.GetType("System.Decimal"));
        dt.Columns.Add("Amount", Type.GetType("System.Decimal"));

 dt.Rows.Add(new object[] ...{ "Sam", 5, 25.00 });
        dt.Rows.Add(new object[] ...{ "Sam", 5, 25.00 });
 dt.Rows.Add(new object[] ...{ "Tom", 7, 50.00 });
        dt.Rows.Add(new object[] ...{ "Tom", 7, 50.00 });
 dt.Rows.Add(new object[] ...{ "Sue", 9, 11.00 });
        dt.Rows.Add(new object[] ...{ "Sue", 9, 11.00 });
 dt.Rows.Add(new Object[] ...{ "Tom", 12, 7.00 });
        dt.Rows.Add(new Object[] ...{ "Tom", 12, 7.00 });
 dt.Rows.Add(new Object[] ...{ "Sam", 14, 512.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", 15, 17.00 });
 dt.Rows.Add(new Object[] ...{ "Sue", 22, 2.50 });
        dt.Rows.Add(new Object[] ...{ "Sue", 22, 2.50 });
 dt.Rows.Add(new object[] ...{ "Tom", 24, 3.00 });
        dt.Rows.Add(new object[] ...{ "Tom", 24, 3.00 });
 dt.Rows.Add(new object[] ...{ "Tom", 33, 78.75 });
        dt.Rows.Add(new object[] ...{ "Tom", 33, 78.75 });
 ds.Tables.Add(dt);
        ds.Tables.Add(dt); DataTable td=dsHelper.SelectDistinct("DistinctEmployees", ds.Tables["Orders"], "EmployeeID");
       DataTable td=dsHelper.SelectDistinct("DistinctEmployees", ds.Tables["Orders"], "EmployeeID"); this.GridView1.DataSource = td;
       this.GridView1.DataSource = td; this.GridView1.DataBind();
       this.GridView1.DataBind(); .net 2.0中的解决方法(原创)
 public DataTable GetTopSearch()
public DataTable GetTopSearch()
 
         {
{ DataSet dsKeyword = dal.GetKeyword();
            DataSet dsKeyword = dal.GetKeyword(); DataSet dsTopSearch = new DataSet();
            DataSet dsTopSearch = new DataSet(); for (int i = 0; i < 4; i++)
            for (int i = 0; i < 4; i++)
 
             {
{ string keyword = dsKeyword.Tables[0].Rows[i]["Name"].ToString();
                string keyword = dsKeyword.Tables[0].Rows[i]["Name"].ToString(); string condition = dsKeyword.Tables[0].Rows[i]["SearchCondition"].ToString();
                string condition = dsKeyword.Tables[0].Rows[i]["SearchCondition"].ToString(); dsTopSearch.Merge(dal.GetTopSearch(keyword,condition));
                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");
            return dsTopSearch.Tables[0].DefaultView.ToTable(true, "ID","Name","Author","Publisher","PublishDate","TypeName","Price","SalePrice","SavePrice","Rebate","ImagePath","ContentIntro"); }
        }
先把DataTable转成DataView,再通过DataView.ToTable()转回DataTable,ToTable()方法中有一个重载可以轻松消除重复行.
 注:该重载的第二个参数为要保存的字段名.