重复的数据表列名称

时间:2012-01-24 21:08:53

标签: c# datatable

我有一个列名为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;
}

4 个答案:

答案 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复制列名。请考虑一下并找到另一个解决方案。

如果您尝试重复列名,那么它将显示您提到的错误。

  

名为“压力”的列已属于此数据表。

在这里您尝试重复列名“压力” ,这就是该错误发生的原因。