Impossible de Copier datacolumn à partir d'une table de données à une autre
Comment puis-je copier 1 colonne de données à partir de 1 table de données à une nouvelle datatable. Quand j'essaie de le faire, j'obtiens l'erreur Colonne 'XXX' appartient déjà à une autre DataTable.?
dataColumn = datatable1.Columns[1];
datatable2 = new DataTable();
datatable2.Columns.Add(dataColumn);
Merci d'Avance
- Si vous affichez le code ou XML, veuillez mettre en évidence les lignes dans l'éditeur de texte et cliquez sur le bouton "code" (101 010) sur la barre d'outils editeur de bien format et la syntaxe en surbrillance!
- double possible de Comment peut-on copier les données de la datacolumn de la table de données à une autre table?
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas copier DataColumns. Ce que vous devez faire est de créer un nouveau DataColumn dans le new datatable avec le même type de données que dans l'ancien datatable de la colonne, et vous aurez besoin d'utiliser une boucle for POUR importer toutes les données de l'ancien datatable à la nouvelle datatable.
Voir le code suivant. Cela suppose que les tables de données ont exactement le même nombre de lignes.
Aussi, Si les données copiées sont des types référence et non pas des types de valeur que vous souhaitiez voir si un .Méthode Clone() est disponible pour le type, ou faire un vous-même. Juste faire "ce = que," dans la boucle FOR ne fonctionnera pas sur les types de référence.
Vous ne pouvez pas copier un DataColumn. (DataColumns sont très étroitement lié à leurs tables)
Au lieu de cela, vous pouvez ajouter une nouvelle colonne avec le même nom et le type de données.
Vous pourriez être à la recherche pour
DataTable.Clone()
, ce qui permettra de créer un structurelle copie de l'intégralité de la table. (Avec le même schéma, mais pas de données)Juste une pensée, sont vos tables de données à la fois dans le même ensemble de données?
Si oui, vous pouvez créer un nom de DataRelation entre les colonnes des deux tables (pensez à clé étrangère).
Vous pouvez ensuite ajouter un Calculés DataColumn pour votre table qui a son Expression propriété a la valeur "de l'Enfant(RelationName).Nomcolonne" ou "Parent(RelationName).Nomcolonne", selon la direction de la relation.
Cela vous donnera le même effet que la copie de la colonne, mais je crois qu'il évalue seulement il langoureusement. Alors peut-être qu'il vous donnera ce dont vous avez besoin.
Il est un exemple ici de comment cela fonctionne. L'exemple utilise la Somme fonction d'agrégation, mais vous avez juste besoin de faire référence à la colonne nom et il sera en double dans votre DataTable
HTH
Le problème est causé par le c# ne peut pas réutiliser l'instance de l'objet créé et l'utilise sur des multiples tables de données. Pour cela, il est nécessaire de créer un nouvel objet DataCollumn pour chaque itération de boucle.
Espère que ça aide...
J'ai utilisé le ci-dessous pour fusionner deux tables à l'aide de la plupart de LINQ et seulement en boucle sur les lignes à la fin. Je n'appellerais pas ça joli, mais ça fonctionne. À l'aide de la rejoindre afin de prévenir certaines des hypothèses énumérées ci-dessus.
Pas de boucle nécessaire , reportez-vous cela , Espérons que cela devrait résoudre votre problème...