web-dev-qa-db-fra.com

Copier des colonnes spécifiques d'un DataTable à un autre

Avoir des données lues (à partir d'un fichier Excel) dans un DataTable et maintenant je veux filtrer ceci et copier uniquement des colonnes spécifiques sur l'autre!

format dataTable:

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

some data représente d'autres données de table non liées à ColA-ColC

Comment copier ColA-ColC avec xxxx dans le nouveau DataTable? 

THX

10
leon22

Copiez la table entière et supprimez les colonnes que vous ne voulez pas.

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

ou 

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

Vous pouvez simplement le faire en utilisant DataView.ToTable () :

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

s'il te plaît, vérifie cela

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

L'exemple ci-dessus suppose que les deux tables ont le même nombre, type et ordre de colonnes.

voici l'actuel link

2
Vijay Singh Rana

Définissez votre copie DataTable avec uniquement les colonnes d'intérêt. Vous pouvez effectuer une boucle sur les colonnes de la ligne source et définir la valeur sur la ligne cible avec ce code exemple:

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)
            {
...
1
tdelepine

Cela peut être réalisé en utilisant LINQ

Supposons que nous ayons deux DataTable. 1. dtSource et 2. dtDestination.

si dtDestination n'a pas de lignes, utilisez le code ci-dessous pour générer des lignes vides.

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

Le code ci-dessous copie des données DataColumn particulières vers DataColumn d'un autre DataTable. Supposons que les deux tables ont le même nombre de lignes.

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

Cette méthode reçoit une table de données (TextFileTable) en tant que paramètre et copie le contenu sélectionné de TextFileTable dans la table tblFormat. Dans l’instruction add row, le nombre de colonnes doit correspondre au nombre de colonnes de la table cible, même si le les deux tables peuvent être de tailles différentes. 

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