【问题标题】:Compare Row of 1st Datatable with Column of 2nd Datatable and build 3rd datatable with matched columns比较第一个数据表的行和第二个数据表的列,并用匹配的列构建第三个数据表
【发布时间】:2014-02-25 11:43:57
【问题描述】:

http://www.codeproject.com/Questions/733071/Compare-Row-of-1st-Datatable-with-Column-of-2nd-Da (理解问题) 这是我的两个数据表(visual c#)

table1

|Par Name.........| Par #|.......Units |.......LSL  |   USL | -----SKIP |
Diffusion.........908513100.......-..........  0  -----99.9  -----1 
Program...........908514100.......-.........  99.5--- 999    -----





table2
starttime   | Product      | Device   | Diffusion       | Program | 
11/7/2013    SAF5100EL       163       -0.145712003      -0.146583006                                 
11/7/2013    SAF5100EL        84       -0.137499005      -0.137592003
11/7/2013    SAF5100EL        44       -0.142690003      -0.143250003  
11/7/2013    SAF5100EL       164       -0.139434993      -0.140459001
11/7/2013    SAF5100EL        34       -0.147183999      -0.148519993

输出应该是这样的

table3 
  |Diffusion|       | Program |
 -0.145712003      -0.146583006
 -0.137499005      -0.137592003
 -0.142690003      -0.143250003
 -0.139434993      -0.140459001
 -0.147183999      -0.148519993

这里必须从 datatable2 中获取 table2 中与 table1 的行名匹配的列(例如扩散和程序),并且必须创建新的 DataTable3 并使用列的排序值(扩散和程序)

【问题讨论】:

  • 到目前为止你尝试过什么? Stackoverflow 不是代码编写服务,但这里的人很乐意帮助您改进您所尝试的内容。

标签: c# visual-studio datatable comparison


【解决方案1】:

正如其他人所说,这是直截了当的逻辑,您应该先自己尝试一下。这也会给你信心。

无论如何,下面的代码应该可以解决问题。根据您的方便进行调整。还要彻底测试。

//dt1 contains Diffusion etc as rows
//dt2 contains diffusion etc as columns
//dt3 is the required table
DataTable dt3 = new DataTable();
DataRow dr = null;

for (int i = 0; i < dt1.Rows.Count; i++)
{
    string col = dt1.Rows[i]["Par Name"].ToString();
    if (dt2.Columns.Contains(col))
    {
        if (!dt3.Columns.Contains(col))
        {
            dt3.Columns.Add(col, typeof(string));
        }

        if (dt3.Rows.Count == 0)
        {
            for (int j = 0; j < dt2.Rows.Count; j++)
            {
                dr = dt3.NewRow();
                dt3.Rows.Add(dr);
            }
        }

        for (int j = 0; j < dt2.Rows.Count; j++)
        {
            dt3.Rows[j][col] = dt2.Rows[j][col].ToString();
        }
    }
}

希望这会有所帮助。

【讨论】:

  • 首先非常感谢您的所有努力@samar。我想知道这个 dt1.Rows[i]["Par Name"].ToString() 这个语句是做什么的?
  • 获取第 i 行和“Par Name”列的值并将值转换为字符串。如果你不写 .ToString() 值将是对象类型
  • 它正在工作。终于拿到桌子了。我想为表 3 中的每一列按升序对值进行排序。我该怎么做
  • 您应该自己尝试一下。这会给你信心。在网上搜索,有很多相同的例子。如果不可能,请提出一个新问题。
  • Samar 这就像一个魅力 :)...感谢你,我正在努力解决这个问题
猜你喜欢
  • 2015-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多