2012-01-24 4 views
1

J'ai une dateable avec les noms de colonne I0, I1, I2 etc. Cependant, ce ne sont pas des noms de colonne réels. Je stocke les noms de colonnes dans une autre table.noms de colonnes datables en double

J'ai alors une boucle pour cartographier les noms de colonnes réelles comme suit:

for (int i = 0; i < dt_key.Rows.Count; i++) 
{ 
    dt_data.Columns[i].ColumnName = dt_key.Rows[i][0].ToString(); 
} 

Je reçois les erreurs suivantes:

Une colonne nommée « pression » appartient déjà à ce DataTable.

et

Une colonne nommée 'Taille' appartient déjà à ce DataTable.

En fin de compte, je suis en train d'écrire à un fichier xml:

dt_data.WriteXml(filename); 

Cela fonctionne, mais je finis les noms de colonnes I0..I22

Il y a des questions similaires à ce sujet, mais ils essaient de créer des datatables avec des noms de colonnes en double. J'essaie juste d'imprimer une table avec des noms de colonne en double. Quelle est une bonne méthode pour le faire?

Edit:

je peux faire ce qui suit:

for (int i = 0; i < dt_key.Rows.Count; i++) 
{ 
    dt_data.Columns[i].ColumnName = dt_key.Rows[i][0].ToString() + " " + dt_data.Columns[i].ColumnName; 
} 
+0

Serait-il bien si la 2ème colonne de pression MVT 'a été nommé « MVT pression 2 » ? – dana

+0

Oui, je pourrais le faire, mais je préférerais ne pas – SamFisher83

+0

Le SGBDR que vous utilisez supporte-t-il la sortie de XML à partir de requêtes (comme MS-SQL, Oracle, DB2)? On dirait que beaucoup d'étapes juste pour créer du XML. –

Répondre

5

Je pense que la réponse courte à votre question est qu'il n'y a pas moyen d'avoir les noms de colonnes en double à l'aide d'un DataTable. À quoi exactement utilisez-vous ce XML? Il existe de nombreux autres moyens de générer du code XML qui vous offrent un contrôle beaucoup plus précis.

Vous pouvez créer manuellement votre fichier en utilisant un objet XmlWriter. This method crée un XmlWriter qui écrit dans un fichier.

4
for (int i = 0; i < dt_key.Rows.Count; i++) 
    { 
     if(dt_data.Columns.Contains(dt_key.Rows[i][0].ToString()))    
     dt_data.Columns[i].ColumnName = dt_key.Rows[i][0].ToString() + " " ; 
     else 
     dt_data.Columns[i].ColumnName = dt_key.Rows[i][0].ToString(); 
    } 

Cependant l'ajout d'un même nom de colonne est une mauvaise pratique, vous pouvez toujours y parvenir en ajoutant un espace à la fin du nom de la colonne pour le rendre unique.

+1

Votre code ne fonctionne que pour 1 cas: si 2 colonnes sont identiques, ajoutez de l'espace, mais si 3 colonnes ou plus sont identiques, un plantage se produit. –

+0

"var col = colName; while (dtR.Columns.Contains (col)) col + =" "; dtR.Columns.Add (col);" Mais c'est une mauvaise pratique ... – Paulos02

Questions connexes