如何对比两个DataTable,取相同行!

qian6515 2014-02-20 03:45:13
我用NPOI读取了2个execl,数据存在了DataTable里面,并设置为相同结构!如下:
DataTable1:
编号 名称1
1 A
2 B
3 C
4 D
5 E

DataTable2:
编号 名称2
1 a
2 b
3 c
4 d
5 e
6 f
7 q

合并2个数据,只取编号相同的行,并且加数据并列,计算!如
编号 名称1 名称2 计算
1 A a A/a
2 B b B/b
3 C c C/c
4 D d D/d
5 E e E/e

请大神帮帮!!
...全文
341 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qian6515 2014-02-20
  • 打赏
  • 举报
回复
出现无法找到列是因为datatable没有列,只需要加入table.Columns.Add("");即可!
qian6515 2014-02-20
  • 打赏
  • 举报
回复
引用 5 楼 yanquanheihei 的回复:
public DataTable Merge(DataTable table1, DataTable table2)
        {
            DataTable table = new DataTable();
            DataRow row = table.NewRow();
            row[0] = "编号";
            row[1] = "名称1";
            row[2] = "名称2";
            row[3] = "计算";
            table.Rows.Add(row);
            
            for (int i = 0; i < table1.Rows.Count; i++)
            {
                for (int j = 0; j < table2.Rows.Count; j++)
                {
                    if (table1.Rows[i][0].ToString() == table2.Rows[j][0].ToString())
                    {
                        DataRow newRow = table.NewRow();
                        newRow[0] = table1.Rows[i][0].ToString();
                        newRow[1] = table1.Rows[i][1].ToString();
                        newRow[2] = table2.Rows[j][1].ToString();
                        newRow[3] = Convert.ToInt32(table1.Rows[i][1].ToString()) / Convert.ToInt32(table1.Rows[j][1].ToString());
                        table.Rows.Add(newRow);
                    }
                }
            }

            return table;
        }
没测过!
出现无法找到列0,在row[0] = "编号";出现!!
yanquanheihei 2014-02-20
  • 打赏
  • 举报
回复
public DataTable Merge(DataTable table1, DataTable table2)
        {
            DataTable table = new DataTable();
            DataRow row = table.NewRow();
            row[0] = "编号";
            row[1] = "名称1";
            row[2] = "名称2";
            row[3] = "计算";
            table.Rows.Add(row);
            
            for (int i = 0; i < table1.Rows.Count; i++)
            {
                for (int j = 0; j < table2.Rows.Count; j++)
                {
                    if (table1.Rows[i][0].ToString() == table2.Rows[j][0].ToString())
                    {
                        DataRow newRow = table.NewRow();
                        newRow[0] = table1.Rows[i][0].ToString();
                        newRow[1] = table1.Rows[i][1].ToString();
                        newRow[2] = table2.Rows[j][1].ToString();
                        newRow[3] = Convert.ToInt32(table1.Rows[i][1].ToString()) / Convert.ToInt32(table1.Rows[j][1].ToString());
                        table.Rows.Add(newRow);
                    }
                }
            }

            return table;
        }
没测过!
  • 打赏
  • 举报
回复
创建一个临时表,把两张表遍历运算的结果存入
水猿兵团五哥 2014-02-20
  • 打赏
  • 举报
回复
datarow dr=dt.newrow; dr[0]=""; dr[1]=""; dt.rows.add(dr); 还有什么? 遍历不会?
qian6515 2014-02-20
  • 打赏
  • 举报
回复
引用 1 楼 machong8183 的回复:
遍历两个table,相同的编号时,则添加数据到另外一个新的table中去
这个我知道,关键是不知道DataTable里面的一些方法咋用!
水猿兵团五哥 2014-02-20
  • 打赏
  • 举报
回复
遍历两个table,相同的编号时,则添加数据到另外一个新的table中去

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧