在尝试将数据列添加到数据表时,我遇到以下错误:无法将嵌套关系或元素列添加到包含SimpleContent列的表中当我第一次点击mt.Columns.Add("IdentityId", typeof(int));
时就会发生这种情况
奇怪的是,当我在前一个错误之后在调试器中查看数据表时,列就在那里。当我点击继续时,错误是:名为"IdentityId"的列已经属于此DataTable它似乎添加了它,然后生成了错误。
这是代码:
XElement doc = XElement.Load(XmlFileName);
string TextToFind = "Some Text";
IEnumerable<XElement> query1 = doc.Descendants("desc").Where(c => c.Value == TextToFind).Ancestors("re");
IEnumerable<XElement> query2 = query1.First().Parent.ElementsAfterSelf("ti");
string xml = query2.First().ToString();
stream = new StringReader(xml);
reader = new XmlTextReader(stream);
xmlDataset.ReadXml(reader);
DataTable mt = xmlDataset.Tables["mt"];
DataColumn dc = mt.Columns.Add("IdentityId", typeof(int));
dc.AutoIncrement = true;
dc.AutoIncrementSeed = 1;
dc.AutoIncrementStep = 1;
我知道这与数据表来自XML这一事实有关,我发现的少数几个解决方案更多地处理XML而不是数据表。无法更改XML。
由于没有任何帮助,我最终使用传统循环进行复制。我尝试使用Copy
和Close
,但一直收到相同的错误。MSDN
能够引导我通过一个解决方案:
private DataTable ConvertToRegularDataTable(DataTable source)
{
DataTable result = new DataTable();
foreach (DataColumn c in source.Columns)
{
result.Columns.Add(c.ColumnName, typeof(string));
}
DataColumn dc = new DataColumn("ID"); // table.Columns.Add("IdentityId", typeof(int));
dc.AutoIncrement = true;
dc.AutoIncrementSeed = 1;
dc.AutoIncrementStep = 1;
result.Columns.Add(dc);
foreach (DataRow dr in source.Rows)
{
result.Rows.Add(dr.ItemArray);
}
return result;
}