zoukankan      html  css  js  c++  java
  • 如何去掉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()方法中有一个重载可以轻松消除重复行.
    注:该重载的第二个参数为要保存的字段名.

  • 相关阅读:
    【转】了解 Boost Filesystem Library
    [转]敏捷软件开发模型SCRUM
    【转】惠普前总裁孙振耀指点职业规划
    新年随想
    C#中使用正则表达式验证电话号码、手机号、身份证号、数字和邮编
    一个简单的QQ客服功能
    特殊符号如(▲)导到EXCEL中产生乱码
    SINA 和腾讯网易微博的OAUTH的DEMO
    分享功能
    发布时选着勾选use fixed naming and single page assemblies 的作用
  • 原文地址:https://www.cnblogs.com/pyt5208/p/1071648.html
Copyright © 2011-2022 走看看