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
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);
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");
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
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)
{
...
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; });
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;
}