2012-01-24 82 views
1

我有一個列名爲I0,I1,I2等的數據集。但是,這些不是實際的列名稱。我將列名存儲在另一個表中。重複的數據表列名稱

然後我有一個循環映射的實際列名稱如下:

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

我收到以下錯誤:

命名爲「壓力」 A柱已經屬於這個數據表。

命名爲 '大小' 一列已經屬於這個數據表。

最後我想寫這一個xml文件:

dt_data.WriteXml(filename); 

這工作,但我最終列名I0..I22

有這種類似的問題,但他們試圖用重複的列名製作數據表。我只是試圖打印出一個重複列名的表。什麼是一個很好的方法來做到這一點?

編輯:

我可以做到以下幾點:

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

難道是正常的,如果第二個「MVT壓力」列被命名爲「MVT壓力2」 ? – dana

+0

是的,我可以那樣做,但我不希望 – SamFisher83

+0

您正在使用的RDBMS是否支持從查詢(如MS-SQL,Oracle,DB2)輸出XML?看起來像創建XML的很多步驟。 –

回答

5

我覺得短期回答你的問題是,有沒有辦法有使用DataTable重複的列名。你到底在用什麼XML?有很多生成XML的替代方法,可以爲您提供更細緻的控制。

您可以使用XmlWriter對象手動創建文件。 This method創建一個寫入文件的XmlWriter

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(); 
    } 

然而添加相同的列名是一個不好的做法,但你仍可以通過在列名的結尾加上一個空格,以使其成爲唯一實現這一目標。

+1

您的代碼僅適用於1種情況:如果2列相同,則會添加空間,但是如果3列或更多列相同,則會發生崩潰。 –

+0

「var col = colName; while(dtR.Columns.Contains(col))col + =」「; dtR.Columns.Add(col);」 但是是一個不好的做法... – Paulos02