我正在尝试向C#中的数据集中的数据表添加一列(从XML文档中读取数据集)。看来,如果我命名列,我在尝试添加时会收到DuplicateNameException。如果我将列保留为未命名,则会将其添加到数据表中。列的名称实际上并不重要;是否定义了Datatable.ColumnName属性。
这是相关的代码块(xR是先前定义的XmlTextReader,这是一段时间的xR.Read()循环):
xR.ReadToDescendant(this.calDataTag);
XmlReader xS = xR.ReadSubtree();
ds.ReadXml(xS);
foreach (DataTable dt in ds.Tables)
{
if (dt.Columns.Contains("offset"))
{
if (dt.TableName == "Single")
{
DataColumn c1 = new DataColumn();
c1.Caption = "TipType";
c1.ColumnName = "whatever";
dt.Columns.Add(c1);
}
foreach (DataRow dr in dt.Rows)
{
foreach (DataColumn dc in dt.Columns)
{
outString.Add("Table: " + dt.TableName.ToString() + " Column: " + dc.ColumnName.ToString() + " RowVal: " + dr[dc] + " " + dt.Columns.Contains("whatever"));
}
}
}
}
有趣的是,字符串的dt.Columns.Contains(“whatever”)部分总是返回False。所以这不是真正的DuplicateNameException。我确定我只是不正确地实现了Columns.Add方法。任何建议都表示赞赏。
答案 0 :(得分:1)
if (dt.Columns.Contains("offset"))
{
if (dt.TableName == "Single")
为什么不这样做:
if (dt.TableName == "Single" && !dt.Columns.Contains("whatever") && dt.Columns.Contains("offset"))
{
var c1 = new DataColumn();
c1.Caption = "TipType";
c1.ColumnName = "whatever";
dt.Columns.Add(c1);
}
然后你必须把你的outString
代放在任何适合的位置,这个代码应该至少更容易调试,你可以更快地找到发生的事情。