Cette Ligne Appartient Déjà À Cette Table
Je reçois un message d'erreur 'cette ligne appartient déjà à ce tableau," à partir du code suivant:
public static DataTable AddNewAllocations(string pCaseNo, ref DataTable pTable)
{
try
{
string sqlText = "SELECT UserID FROM tblUsers;";
aSqlQuery aQ = new aSqlQuery(sqlText, "table");
DataTable userTable = aQ.TableResult;
foreach (DataRow userRow in userTable.Rows)
{
int allocAlready = 0;
foreach (DataRow allocRow in pTable.Rows)
{
if (allocRow["FeeEarner"].ToString() == userRow["UserID"].ToString())
{
allocAlready = 1;
}
}
if (allocAlready == 0)
{
string strUser = userRow["UserID"].ToString();
decimal fees = cTimesheet.UserFees(strUser, pCaseNo);
int intCaseNo = Int32.Parse(pCaseNo);
if (fees > 0)
{
Object[] array = new object[8];
array[0] = 0;
array[1] = intCaseNo;
array[2] = DateTime.Today;
array[3] = strUser;
array[4] = fees;
array[5] = 0;
array[6] = fees;
array[7] = true;
pTable.Rows.Add(array);
}
}
}
return pTable;
}
catch (Exception eX)
{
throw new Exception("cAllocation: Error in NewAllocations()" + Environment.NewLine + eX.Message);
}
Quand je marche à travers le code, je peux voir que l'erreur est levée sur la deuxième occasion, la ligne suivante est obtenue:
pTable.Rows.Add(array);
Étant donné que je créer un nouveau tableau d'objets chaque fois que le code d'entrée de la boucle, je ne vois pas pourquoi je reçois ce message d'erreur, ce qui me donne à penser la même ligne est ajoutée à de multiples reprises. Pourquoi le code voir chaque boucle que l'ajout de la même datarow lorsque la ligne est généré par un nouvel objet array à chaque fois?
- Avez-vous une clé primaire dans la table?
- Ses déconnecté de la table - mais non, je n'ai pas précisé de quelle colonne de la clé primaire - est-ce le problème?
- Peut-être. Essayez de mettre des valeurs différentes à chaque fois et de voir le champ est à l'origine de ce
- Vous n'avez pas à faire une nouvelle ligne? Comme DataRow DR = pTable.NewRow(); avant vous pouvez ajouter une ligne?
- puis-je demander ce qui est arrivé à celui-ci?
- J'ai ajouté le code qui a travaillé ci-dessous >>
Vous devez vous connecter pour publier un commentaire.
Une autre approche est de créer un NewRow() au début de la boucle, céder ses données, puis les Lignes.Ajouter() à la fin de la boucle.
dr = td.NewRow();
avant laforeach
boucle. Le déplacement de la déclaration de l'intérieur de la boucle fixe mon problème.Le code qui enfin était-ce:
Je pense que la clé a été l'aide de ImportRow plutôt que de Lignes.Ajouter. J'ai toujours utiliser les Lignes.Ajouter à ma méthode, mais seulement lors de l'ajout de lignes dans une table nouvellement créée. J'ai ensuite une boucle sur la table existante qui a été adoptée en tant que paramater, et l'utilisation ImportRow à ajouter à chaque ligne de la paramater table, à la nouvelle. J'ai ensuite passer le nouveau combiné table à mon retour, plutôt que d'une modification de la table de paramètres.