我有一个应用程序正在处理数据,该应用程序需要根据是否翻转来对数据进行排序。这些表是相同的。代码看起来像这样:
DataTable dt2 = dt1.Clone();
DataRow r = dt1.NewRow();
FillUp(ref r);
if(bitISetEarlier)
dt2.ImportRow(r);
else
dt1.ImportRow(r);
现在,我遇到的一个明显问题是,如果该行尚未附加到表格,ImportRow()
则会静默失败,最终得到一张空表格。当我将其更改为:
if(bitISetEarlier)
dt2.Rows.Add(r);
else
dt1.Rows.Add(r);
我开始收到一个异常,说一个函数试图为另一个表添加一个存在的行。所以当我尝试这个时:
if(bitISetEarlier)
if(r.RowState == DataRowState.Detached)
dt2.Rows.Add(r)
else dt2.ImportRow(r);
else
if(r.RowState == DataRowState.Detached)
dt1.Rows.Add(r)
else dt1.ImportRow(r);
异常停止了,但是任何分配给的尝试dt2
仍然表明该行属于另一个表,但是如果我注释掉该dt2
if
语句并只是尝试ImportRow()
,则dt2.Rows.Count
仍然为 0 并且没有分配记录。
在知道它属于哪个表之前,我需要填充DataRow
它,但我不知道该行在达到此功能之前将具有哪些列。指示它应该转到哪个表的条件不与DataTable
.
问题是即使它们具有相同的列,NewRow()
是否向行添加了一个属性,使其与姊妹表不兼容?NewRow()
有没有一种方法可以获得与(在不知道任何列是什么的情况下提前复制模式)相同的功能但我可以动态分配的方法?我知道我可能可以手动构建一个兼容的行,方法是将其包装在一个for
循环中并在每次我需要使用该DataTable.Columns
属性的新行时构建列,但如果可能的话,我想避免这样做。