Cette Ligne appartient déjà à une autre table d'erreur lorsque vous essayez d'ajouter des lignes?
J'ai un DataTable qui a quelques lignes et je suis en utilisant le filtrer les lignes d'obtenir une collection de des datarow que j'ai ensuite boucle à travers l'utilisation de foreach et l'ajouter à un autre DataTable, mais il me donne le message d'erreur "Cette Ligne appartient déjà à une autre table". Voici le code:
DataTable dt = (DataTable)Session["dtAllOrders"];
DataTable dtSpecificOrders = new DataTable();
DataRow[] orderRows = dt.Select("CustomerID = 2");
foreach (DataRow dr in orderRows)
{
dtSpecificOrders.Rows.Add(dr); //Error thrown here.
}
- bonne question; je obtenir confus au sujet de lignes et de tables appartenant à d'autres conteneurs
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour créer un nouveau
Row
avec les valeurs dedr
premier. UnDataRow
ne peut appartenir qu'à un seulDataTable
.Vous pouvez également utiliser
Add
qui prend un tableau de valeurs:Ou probablement même mieux:
ImportRow
din travail pour moi. Mais Ajouter des Lignes fait! Thanksssssssssss.ImportRow()
ne fonctionne pas pour moi parce que je ne voulais pas faire.Clone()
ou créer des colonnes sur mon nouveau DataTable, d'abord. Il est venu avec 0 quand j'ai regardé.Rows.Count
sur mon nouveau tableau. Depuis que je suis allez avoir besoin de créer des colonnes de ma table et de les ajouter, je viens de créer unNewRow()
déclaration et ajouté mes valeurs pour les colonnes sur cette nouvelle ligne, directement et a ajouté que la ligne de ma table, à l'intérieur de la boucle (voir ma réponse ci-dessous).Essayez ceci:
C'est parce que la ligne vous êtes à la copie n'a pas la même
TableName
:Par exemple, essayez:
Ce n'est pas la plus propre et la plus rapide/facile/solution plus élégante, mais c'est un brute force one que j'ai créé pour faire le travail dans un scénario similaire:
Les noms dans le DataColumns doivent correspondre à ceux de votre table d'origine pour qu'il fonctionne. J'ai juste utilisé "ID" et "Nom" comme des exemples.
Pourquoi ne pas simplement utiliser
CopyToDataTable
dt
, Avi.vous pouvez donner quelques id pour les colonnes et le nom est unique.