0

2 つのデータ テーブル間で列シフト機能を実装する必要があります。DataTable 1 に列 {A,B,C} があり、DataTable 2 に {A} があるとします。

列 {B,C} を DataTable 2 に移動したい場合、どうすればよいですか? 両方のテーブルのデータは類似している必要があります。

DataTable が適切なオプションでない場合は、これを達成する方法を教えてください..

これは List> - Nested Lists で実行できますか? 以下のコードを試してみましたが、マージは適切なオプションではないと考えました。

  private void move(DataTable source, DataTable dest, string colname)
    {
        var result = source.AsEnumerable().Select(row => row.Field<string>(colname));
        dest.Columns.Add(colname);
        DataTable dt = source.DefaultView.ToTable(false, colname);

        dest.Merge(dt);          

    }

私は初心者なので、ユーザーの選択に基づいて列をシフトできる他の方法があれば提案してください。

4

2 に答える 2

0

昔、私はこれをやっていました。データ テーブル コピーのコードを手動で作成する必要がありました。以下のメソッドは、不足している列をソース テーブルからターゲット テーブルにコピーするジョブを実行します。コピーされた列名のコレクションを返します。2 番目の関数は、ソース列からターゲット列にデータをコピーします。主キーの列名を入力として取り、データをコピーする必要がある列名のリストを取得します。

public List<string> CopyDistinctColumns(DataTable source, DataTable target)
{
    var copiedColumn = new List<string>();
    for(var x = 0; x < source.Columns.Count; x++)
    {
        var column = source.Columns[x];
        if(!target.Columns.Contains(column.ColumnName))
        {
            var newCol = new DataColumn
            {
                ColumnName = column.ColumnName,
                DataType = column.DataType,
                Caption = column.Caption,
                DefaultValue = column.DefaultValue,
                MaxLength = column.MaxLength,
            };
            copiedColumn.Add(column.ColumnName);
            target.Columns.Add(newCol);
        }
    }
    return copiedColumn;
}

public void CopyData(DataTable source, DataTable target, string primaryKeyColumnName, List<string> copiedColumns)
{
    for (var i = 0; i < source.Rows.Count; i++)
    {
        var row = source.Rows[i];
        var primaryKeyValue = row[primaryKeyColumnName];
        for (var j = 0; j < target.Rows.Count; j++)
        {
            var trow = target.Rows[j];
            if (trow[primaryKeyColumnName].Equals(primaryKeyValue))
            {
                foreach (var col in copiedColumns)
                {
                    trow[col] = row[col];
                }
                break;
            }
        }
    }
}
于 2013-07-09T11:46:21.150 に答える