如何去掉DataTable中的重复行(新增.net 2.0中最新解决方法---简便)

简介: .net 1.1中的解决方法(转)1建立一个DataSetHelper类(DataSetHelper.cs) public class DataSetHelper...{    public DataSet ds;    public DataSetHelper(ref DataSet DataSet)    .
.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"525.00 } );
        dt.Rows.Add(
new   object []  ... "Tom"750.00 } );
        dt.Rows.Add(
new   object []  ... "Sue"911.00 } );
        dt.Rows.Add(
new  Object[]  ... "Tom"127.00 } );
        dt.Rows.Add(
new  Object[]  ... "Sam"14512.00 } );
        dt.Rows.Add(
new  Object[]  ... "Sue"1517.00 } );
        dt.Rows.Add(
new  Object[]  ... "Sue"222.50 } );
        dt.Rows.Add(
new   object []  ... "Tom"243.00 } );
        dt.Rows.Add(
new   object []  ... "Tom"3378.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");
        }


先把DataTable转成DataView,再通过DataView.ToTable()转回DataTable,ToTable()方法中有一个重载可以轻松消除重复行.
注:该重载的第二个参数为要保存的字段名.

目录
相关文章
|
数据库 C++
.NET Core 使用 EF 出错的解决方法
.NET Core 使用 EF 出错的解决方法
391 0
.NET Core 使用 EF 出错的解决方法
|
9月前
|
消息中间件 安全 数据库连接
.NET开发问题记录——TransactionScope出错:“与基础事务管理器的通信失败”的解决方法
.NET开发问题记录——TransactionScope出错:“与基础事务管理器的通信失败”的解决方法
184 0
|
9月前
|
数据库 C#
C#,.net,winform导入Excel功能以及下载Excel文件到本地,并使用SqlBulkCopy把DataTable类型的数据写入到sqlserver数据库中
C#,.net,winform导入Excel功能以及下载Excel文件到本地,并使用SqlBulkCopy把DataTable类型的数据写入到sqlserver数据库中
218 0
|
JSON 前端开发 数据格式
.NET 构造DataTable返回多个json值
有时候我们使用Ajax链接一般处理程序需要返回多个值,然而这些数据并非在一个查询表内,此时便想到构造一个虚拟的DataTable,这样就可以返回多个值了(当然有很多办法,这是其中一种 )。
1109 0