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

 
.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()方法中有一个重载可以轻松消除重复行.
注:该重载的第二个参数为要保存的字段名.

转载于:https://www.cnblogs.com/gerald1015/archive/2008/06/23/1228188.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值