我在一个带有2个字符串列的相应DataTable中有一个像{“Foo”,“Bar”}这样的DataRow。我想将这一行复制到一个新的DataTable,它有 3 字符串列,其中第0列是我要传入的新值。因此,生成的行应该看起来像{“我的”,“Foo”,“Bar”}。
冲洗,重复。另一个复制操作就像{“Bob”,“Smith”} => {“我的”,“鲍勃”,“史密斯”}。
我尝试在Array.Copy()和myDataRow.ItemArray.CopyTo(otherDataRow.ItemArray)中使用DataRow.ItemArray。然后我读到这不起作用,因为ItemArray有点只读,尽管intellisense告诉你。
当然,我可以编写自己的循环来逐列复制值,但是.. 为什么这不是内置于库中的东西?
采样代码:
DataTable dtDestination = new DataTable();
DataTable dtSource = new DataTable();
dtSource.Columns.Add("Str1");
dtSource.Columns.Add("Str2");
dtDestination.Columns.Add("Str0");
dtDestination.Columns.Add("Str1");
dtDestination.Columns.Add("Str2");
dtSource.Rows.Add("Foo", "Bar");
dtSource.Rows.Add("Bob", "Smith");
foreach (DataRow drSrc in dtSource.Rows)
{
DataRow drNew = dtDestination.NewRow();
drNew["Str0"] = "My";
//this doesn't work
Array.Copy(drSrc.ItemArray, 0, drNew.ItemArray, 1, drSrc.ItemArray.Length);
//this doesn't work either
drSrc.ItemArray.CopyTo(drNew.ItemArray, 1);
//I want to add the "new row" to my destination table,
//*WITH* the contents from the source-row plus the "My" value in the 0th column!
dtDestination.Rows.Add(drNew);
}
答案 0 :(得分:1)
如果没有SetValue,则无法设置.ItemArray值 但是你可以设置ItemArray本身
function(){
// Push new objects in model.messages into loadedModels
}.observes('model.messages.@each')
您应该将测试值添加到源,而不是目标表...
答案 1 :(得分:1)
创建扩展方法:
public static void CopyValuesFrom(this DataRow me, DataRow copyFrom, int insertIndex = 0, int copyIndex = 0, int count = 0)
{
if (count == 0)
count = Math.Min(copyFrom.ItemArray.Length - copyIndex, me.ItemArray.Length - insertIndex);
for (var i = 0; i < count; i++)
me[insertIndex + i] = copyFrom[copyIndex + i];
}
复制:
drNew.CopyValuesFrom(drSrc, 1);
答案 2 :(得分:0)
有一种直接的方法可以做到这一点,只需使用ImportRow方法,另外在此附加列的供应值之后