文档章节

比较两个DataTable中不同的记录,且合并两个DataTable的列显示,有图

深圳大道
 深圳大道
发布于 2016/12/29 15:40
字数 453
阅读 24
收藏 0
protected void Page_Load(object sender, EventArgs e)
    {
        creatDataTable();        
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        DataTable DataTableA = ViewState["datatable1"] as DataTable;
        DataTable DataTableB = ViewState["datatable2"] as DataTable;
        DataTableB.Columns.Add("flag", typeof(String));
        DataTableB.Columns["flag"].DefaultValue = "×";
        DataView dv1 = DataTableA.DefaultView;
        DataView dv2 = DataTableB.DefaultView;
        foreach (DataRowView drv1 in dv1)
        {
            dv2.RowFilter = " id = '" + drv1["id"].ToString() + "'";
            if (dv2.Count > 0)
            {
                if (CompareUpdate(drv1, dv2[0]))//比较是否相同
                {
                    dv2[0].Row["flag"] = "√";
                }
                else
                {
                    dv2[0].Row["flag"] = "×";
                }
            }
        }
        GridView3.DataSource = MergeDataTable(DataTableA,DataTableB);
        GridView3.DataBind();
    }

    #region 创建测试DataTable
    protected void creatDataTable()
    {
        //第一步 先初始化数据 
        DataTable dtA = new DataTable();
        dtA.Columns.Add("id", typeof(int));
        dtA.Columns.Add("name", typeof(string));
        dtA.Rows.Add(1, "a");
        dtA.Rows.Add(2, "b");
        dtA.Rows.Add(3, "c");
        dtA.Rows.Add(4, "d");

        DataTable dtB = dtA.Clone();
        dtB.Rows.Add(1, "a");
        dtB.Rows.Add(2, "d");
        dtB.Rows.Add(3, "e");
        dtB.Rows.Add(4, "f");

        GridView1.DataSource = dtA;
        GridView1.DataBind();

        GridView2.DataSource = dtB;
        GridView2.DataBind();

        ViewState["datatable1"] = dtA;
        ViewState["datatable2"] = dtB;
    }
    #endregion 

    #region 比较数据行是否相同
    /// <summary>
    /// 比较数据行是否相同
    /// </summary>
    /// <param name="dr1"></param>
    /// <param name="dr2"></param>
    /// <returns></returns>
    private static bool CompareUpdate(DataRowView dr1, DataRowView dr2)
    {
        //行里只要有一项不一样,整个行就不一样,无需比较其它
        object val1;
        object val2;
        for (int i = 1; i < dr1.Row.ItemArray.Length; i++)
        {
            val1 = dr1[i];
            val2 = dr2[i];
            if (!val1.Equals(val2))
            {
                return false;
            }
        }
        return true;
    }
    #endregion 

    #region 合并两个DataTable列
    /// <summary>
    /// 合并两个DataTable列
    /// </summary>
    /// <param name="dt1"></param>
    /// <param name="dt2"></param>
    /// <returns></returns>
    public static DataTable MergeDataTable(DataTable dt1, DataTable dt2)
    {
        //定义dt的行数 
        int dtRowCount = 0;
        //dt的行数为dt1或dt2中行数最大的行数 
        if (dt1.Rows.Count > dt2.Rows.Count)
        {
            dtRowCount = dt1.Rows.Count;
        }
        else
        {
            dtRowCount = dt2.Rows.Count;
        }
        DataTable dt = new DataTable();
        //向dt中添加dt1的列名 
        for (int i = 0; i < dt1.Columns.Count; i++)
        {
            dt.Columns.Add(dt1.Columns[i].ColumnName + "1");
        }
        //向dt中添加dt2的列名 
        for (int i = 0; i < dt2.Columns.Count; i++)
        {
            dt.Columns.Add(dt2.Columns[i].ColumnName + "2");
        }
        for (int i = 0; i < dtRowCount; i++)
        {
            DataRow row = dt.NewRow();
            for (int j = 0; j < dt.Columns.Count; j++)
            {
                for (int k = 0; k < dt1.Columns.Count; k++) { if ((dt1.Rows.Count - 1) >= i) { row[k] = dt1.Rows[i].ItemArray[k]; } }
                for (int k = 0; k < dt2.Columns.Count; k++) { if ((dt2.Rows.Count - 1) >= i) { row[dt1.Columns.Count + k] = dt2.Rows[i].ItemArray[k]; } }
            }
            dt.Rows.Add(row);
        }
        return dt;
    }
    #endregion

本文转载自:http://blog.csdn.net/smartsmile2012/article/details/8216157

深圳大道
粉丝 3
博文 877
码字总数 0
作品 0
深圳
架构师
私信 提问
【转载】C#的Merge方法合并两个DataTable对象的数据

在C#中的Datatable类中,可以使用DataTable类的Merge方法对两个相同结构的DataTable对象进行求并集运算,将两个DataTable对象的数据行合并到其中一个DataTable变量中,或者说往其中一个DataT...

江湖逍遥
07/25
0
0
C# LINQ学习(3个例子)

本文中的内容是3个学习LINQ写时的代码段 场景1:对打乱顺序的诗句进行排序 按DataTable的列Number,对DataTable中的行进行排序,最后按序输出Content列 场景2:将分放在两个DataTable中的诗句...

北风其凉
2014/08/13
115
0
jQuery Datatable 实用简单实例

目标: 使用jQuery Datatable构造数据列表,并且增加或者隐藏相应的列,已达到数据显示要求。同时,jQuery Datatable强大的功能支持:排序,分页,搜索等。 Query Datatable能良好支持数据完...

sgyyz
2014/05/08
0
0
QT 创建鼠标右键菜单

QWidget及其子类都可有右键菜单,因为QWidget有以下两个与右键菜单有关的函数: Qt::ContextMenuPolicy contextMenuPolicy () const void setContextMenuPolicy ( Qt::ContextMenuPolicy pol...

晨曦之光
2012/04/13
11.3K
3
深入详解DataTable

前言:ADO.NET概述 在学习DataTable知识之前,我们有必要了解下ADO.NET。以下摘自MSDN: ADO.NET 对 Microsoft SQL Server 和 XML 等数据源以及通过 OLE DB 和 XML 公开的数据源提供一致的访...

技术小胖子
2017/11/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Security 自定义登录认证(二)

一、前言 本篇文章将讲述Spring Security自定义登录认证校验用户名、密码,自定义密码加密方式,以及在前后端分离的情况下认证失败或成功处理返回json格式数据 温馨小提示:Spring Security...

郑清
32分钟前
3
0
php yield关键字以及协程的实现

php的yield是在php5.5版本就出来了,而在初级php界却很少有人提起,我就说说个人对php yield的理解 Iterator接口 在php中,除了数组,对象可以被foreach遍历之外,还有另外一种特殊对象,也就是继承...

冻结not
45分钟前
4
0
servlet请求和响应的过程

本文转载于:专业的前端网站➥servlet请求和响应的过程 1.加载 Servlet类被加载到Java虚拟机中,并且实例化。在这个过程中,web容器(例如tomcat)会调用Servlet类的公开无参构造函数,产生一...

前端老手
45分钟前
4
0
golang 1.13 errors 包来了,不用写“err 气功波”代码

引 这篇是对 errors 包 的姿势挖掘 气功波错误代码 从 http.Get()返回的错误 判断 syscall.ECONNREFUSED 错误.以前要对 go 标准库 error 结构有点熟悉,才能写出下面的代码 func CmdErr(err ...

guonaihong
49分钟前
28
0
喜玛拉雅已听书单

时间倒序排 书名 作者 状态 唐砖 孑与2 进行中 死灵之书(克苏鲁神话合集) 阿卜杜拉·阿尔哈萨德 进行中 赡养人类 刘慈欣 完结 赡养上帝 刘慈欣 完结 中国太阳 刘慈欣 完结 中国太阳 刘慈欣...

Alex_Java
50分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部