我有一个列名为I0,I1,I2等的数据。但这些不是实际的列名。我将列名存储在另一个表中。
然后我有一个循环来映射实际的列名,如下所示:
for (int i = 0; i < dt_key.Rows.Count; i++)
{
dt_data.Columns[i].ColumnName = dt_key.Rows[i][0].ToString();
}
我收到以下错误:
名为“压力”的列已属于此DataTable。
和
名为“Size”的列已属于此DataTable。
最终我试图将其写入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 :(得分:5)
我认为对您的问题的简短回答是,无法使用DataTable
重复列名称。您究竟使用此XML的原因是什么?有许多替代方法可以生成XML,从而为您提供更精细的控制。
您可以使用XmlWriter
对象手动创建文件。 This method创建一个写入文件的XmlWriter
。
答案 1 :(得分:5)
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();
}
但是,添加相同的列名称是一种不好的做法,您仍然可以通过在列名末尾添加空格来实现此目的,以使其唯一。
答案 2 :(得分:0)
也许您可以使用DataColumn.Caption属性来存储列显示名称:
https://msdn.microsoft.com/en-us/library/system.data.datacolumn.caption(v=vs.110).aspx
答案 3 :(得分:0)
您不能使用Data Table
复制列名。请考虑一下并找到另一个解决方案。
如果您尝试重复列名,那么它将显示您提到的错误。
名为“压力”的列已属于此数据表。
在这里您尝试重复列名“压力” ,这就是该错误发生的原因。