web-dev-qa-db-ja.com

あるDataTableから別のDataTableに特定の列をコピーします

DataTableのデータを(Excelファイルから)読み込んで、これをフィルター処理して特定の列のみを他の列にコピーしたい!

dataTableフォーマット:

some data 
ColA|ColB|ColC
xxxx|xxxx|xxxx
some data

some dataは、ColA-ColCに関連しない他のテーブルデータを表します

XxxxのColA-ColCを新しいDataTableにコピーするにはどうすればよいですか?

THX

14
leon22

テーブル全体をコピーし、不要な列を削除します。

DataTable copyDataTable;
copyDataTable = table.Copy();
copyDataTable.Columns.Remove("ColB");

または

int columnIndex = 1;//this will remove the second column
DataTable copyDataTable;
copyDataTable = table.Copy();
copyDataTable.Columns.RemoveAt(columnIndex);

DataView.ToTable() を使用して簡単に実行できます。

System.Data.DataView view = new System.Data.DataView(yourOriginalTable);
System.Data.DataTable selected = 
        view.ToTable("Selected", false, "col1", "col2", "col6", "col7", "col3");
33
Arshad

対象列のみを使用してコピーDataTableを定義します。次のサンプルコードを使用して、ソース行の列でループし、値をターゲット行に設定できます。

public void IntegrateRow(DataRow p_RowCible, DataRow p_RowSource)
        {
            try
            {
                foreach (DataColumn v_Column in p_RowCible.Table.Columns)
                {
                    string ColumnName = v_Column.ColumnName;
                    if (p_RowSource.Table.Columns.Contains(ColumnName))
                    {
                        p_RowCible[ColumnName] = p_RowSource[ColumnName];
                    }
                }
            }
            catch (Exception e)
            {
...
2
tdelepine

これをチェックしてください

  foreach (DataRow dr in dataTable1.Rows) {
    if (/* some condition */)
        dataTable2.Rows.Add(dr.ItemArray);
     }

上記の例では、両方のテーブルの列の数、タイプ、順序が同じであると想定しています。

これが実際の link です

2

LINQを使用して実現できます

2つのDataTableがあるとします。 1. dtSourceおよび2. dtDestination

dtDestinationに行がない場合、以下のコードを使用して空白行を生成します。

dtSource.AsEnumerable().All(row => { dtDestination.Rows.Add(); return true; });

以下のコードは、特定のDataColumnデータを別のDataColumnDataTableにコピーします。両方のテーブルの行数が同じであると仮定します。

int rowIdx = 0;
dtDestination.AsEnumerable().All(row => { row["colName"] = dtSource.Rows[rowIdx++]["colName"]; return true; });
0
Prem

このメソッドは、パラメーターとしてデータテーブル(TextFileTable)を受け取り、TextFileTableの選択された内容をtblFormatテーブルにコピーします。行の追加ステートメントでは、列の数は、 2つのテーブルは異なるサイズにすることができます。

public DataTable CopyTable (DataTable TextFileTable)
        {
            DataTable tblFormat = new DataTable();

                tblFormat.Columns.Add("ColumnA");
                tblFormat.Columns.Add("ColumnB");
                tblFormat.Columns.Add("ColumnC");
                tblFormat.Columns.Add("ColumnD");
                tblFormat.Columns.Add("ColumnE");

                for (int i = 0; i < TextFileTable.Rows.Count; i++)
                {

                    tblFormat.Rows.Add(new string[] { TextFileTable.Rows[i][0].ToString(), TextFileTable.Rows[i][1].ToString(),
                    TextFileTable.Rows[i][2].ToString(), TextFileTable.Rows[i][8].ToString(), TextFileTable.Rows[i][9].ToString() });

                }


            return tblFormat;
        }
0
C.Poh