如何将数据表列和值复制到另一个数据表

时间:2013-03-06 05:34:18

标签: c# datatable

我有一个数据表dt1有4列(名称,地址,联系人,标记)有0行,我有另一个数据表dt2有2列(StdName,StdAddress),行数很少。

当我做dt1 = dt2.copy()之类的事情时;然后我的dt1正在改变。这是我不想要的。

我想将dt2列和值复制到dt1。所以在我的dt1列(名称和地址)中将填充stdName和StdAddress值。

请有人帮我怎么做。

10 个答案:

答案 0 :(得分:5)

我尝试了这个solution

private void CopyColumns(DataTable source, DataTable dest, params string[] columns)
{
 foreach (DataRow sourcerow in source.Rows)
 {
   DataRow destRow = dest.NewRow();
    foreach(string colname in columns)
    {
      destRow[colname] = sourcerow[colname];
    }
   dest.Rows.Add(destRow);
  }
}

CopyColumns(source, destiny, "Column1", "column2");

它帮助我解决了我的问题。

答案 1 :(得分:3)

试试这个:

  for (int i = 0; i < dt2.Rows.Count; i++)
  {
    dt1.Rows.Add(dt2.Rows[i][0], dt2.Rows[i][1]);
  }

答案 2 :(得分:1)

  for (int k = 0; k < dt2.Rows.Count; k++)
  {
    dt1.Rows[k]["Name"] = dt2.Rows[k]["StdName"];
    dt1.Rows[k]["Address"] = dt2.Rows[k]["StdAddress"];
  }

答案 3 :(得分:0)

试试这个。

 DataTable dtEmp = new DataTable("EMP");
        dtEmp.Columns.Add("Name", typeof(String));
        dtEmp.Columns.Add("Address", typeof(String));
        dtEmp.Columns.Add("Contact", typeof(String));
        dtEmp.Columns.Add("Marks", typeof(String));


        DataTable dtStd = new DataTable("STD");
        dtStd.Columns.Add("StdName", typeof(String));
        dtStd.Columns.Add("StdAddress", typeof(String));

        foreach (DataColumn dc in dtStd.Columns)
        {
            dtEmp.Columns.Add(dc.ColumnName, dc.DataType);
        }
        // Import rows from dtStd Table.

答案 4 :(得分:0)

试试吧......

    DataTable dt1 = new DataTable();
    dt1.Columns.Add("col1", typeof(String));
    dt1.Columns.Add("col2", typeof(String));
    dt1.Columns.Add("col3", typeof(String));
    dt1.Columns.Add("col4", typeof(String));

    DataTable dt2 = new DataTable();
    dt2.Columns.Add("col5", typeof(String));
    dt2.Columns.Add("col6", typeof(String));

    dt1.Merge(dt2);

答案 5 :(得分:0)

我知道这是旧的,但数据来自哪里?

如果您正在查询SQL数据库,则只需更改:

    SELECT <column1>, <column2> FROM...

    SELECT <column2>, <column1> FROM...

使用您想要的列查询并返回数据表。

答案 6 :(得分:0)

我不确定但你可以试试这个......

Datatable1.Merge(Datable2)

它会为您提供这样的输出

答案 7 :(得分:0)

  for (int k = 0; k < dt2.Rows.Count; k++) {
    dt1.Rows[k]["Name"] = dt2.Rows[k]["StdName"];
    dt1.Rows[k]["Address"] = dt2.Rows[k]["StdAddress"];
  }

这对我来说非常有效。我只需要像这样在VB中重写它:

  For r = 0 To t2.Rows.Count - 1
        t1.Rows(r)("Stat") = t2.Rows(r)("Stat")
        t1.Rows(r)("Dest") = t2.Rows(r)("Dest")
        t1.Rows(r)("Orig") = t2.Rows(r)("Orig")
  Next

答案 8 :(得分:0)

您可以克隆表引用并通过调用clear删除行,如下所示:

public void setData(List<Notification> newNotifications) {
        DiffUtil.DiffResult diffResult = getDiffBetweenNewAndOldList(newNotifications);
        this.notificationList.clear();
        this.notificationList.addAll(newNotifications);
        diffResult.dispatchUpdatesTo(this);
}

答案 9 :(得分:0)

如果计算出的值足以满足您的需求,而无需循环整个数据表,您可以使用 expression 属性。

假设您已经有一个名为 Email 的列,您可以创建一个名为 UserName 的列,该列源自 Email

dataTable.Columns.Add("UserName", typeof(string), "Email");