1


2

データテーブルのデータ列のデータを別のデータテーブルにコピーするにはどうすればよいですか?

あるデータ列から別のデータ表にデータを含むデータ列をコピーするにはどうすればよいですか? 私のようなデータテーブルがあります

DataTable datatable1=new DataTable();

そして、そのテーブルには4つの列がありますが、私は1つの列だけが欲しいです。

DataTable datatable2=new DataTable();
addressAndPhones2.Columns.Add(addressAndPhones.Columns[0].ColumnName,addressAndPhones.Columns[0].DataType);

しかし、これは列を追加するだけですが、その列のデータをdatatable2にコピーする必要があります。

2 Answer


11


2つのソリューションが思い浮かびます。

  1. 列を作成した後、すべての行をループしてデータをコピーします ソースからターゲットへ。

  2. datatable1.Copy()を実行して、* all *列+データをコピーし、それらを削除します 必要ありません。

2番目のコードはコーディングが簡単ですが、不要なデータをコピーします(余分な時間とメモリを意味します)。

最初のものについては、destiny-datatableを準備し、sourceとdestinyの列名(および型)が同じ場合:

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

任意の数の列に名前を付けます。


3


次のようにして、すべての行をループできます。

private void CopyColumn(DataTable srcTable, DataTable dstTable, string srcColName, string dstColName)
{
    foreach (DataRow row in srcTable.Rows )
    {
        DataRow newRow = dstTable.NewRow();
        newRow[dstColName] = row[srcColName];
        dstTable.Rows.Add(newRow);
    }
}