【问题标题】:how to copy datatable column and value to another datatable如何将数据表列和值复制到另一个数据表
【发布时间】:2013-03-06 05:34:17
【问题描述】:

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

当我在做类似 dt1 = dt2.copy();然后我的 dt1 正在发生变化。这是我不想要的。

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

请有人帮助我如何做到这一点。

【问题讨论】:

  • 除了Copy()之外,你有没有尝试过别的?
  • 不,请告诉我其他的尝试方法?

标签: c# datatable


【解决方案1】:

我试过这个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");

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

【讨论】:

    【解决方案2】:

    试试这个:

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

    【讨论】:

    • 我想让你知道,那是几年后,这就是帮助我解决问题的原因。 +1
    【解决方案3】:
      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"];
      }
    

    【讨论】:

      【解决方案4】:

      试试这个。

       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.
      

      【讨论】:

        【解决方案5】:

        试试看……

            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);
        

        【讨论】:

          【解决方案6】:

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

          如果你查询的是 sql 数据库,你可以改一下:

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

          查询并返回包含所需列的数据表。

          【讨论】:

            【解决方案7】:

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

            Datatable1.Merge(Datable2)
            

            它会给你这样的输出

            【讨论】:

              【解决方案8】:
                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
              

              【讨论】:

                【解决方案9】:

                您可以像这样通过调用 clear 克隆对表的引用并删除行:

                NewDataTable= OldDatatable.Clone();
                NewDataTable.rows.clear();
                

                【讨论】:

                • 点评来源: 您好,请不要只回答源代码。尝试对您的解决方案如何工作提供一个很好的描述。请参阅:How do I write a good answer?。谢谢
                【解决方案10】:

                如果计算值对您来说足够了,您可以使用 expression 属性,而无需循环整个数据表。

                假设您已经有一个名为 Email 的列,您可以创建一个从 Email 派生的名为 UserName 的列:

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2011-05-10
                  • 2011-02-04
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-01-28
                  相关资源
                  最近更新 更多