从值集合中添加 DataRow 项
Adding DataRow items from collection of values
我正在尝试创建一个 DataRow,它从硬编码字符串或字符串变量中获取一些值,并从集合的值中获取其余值,具体来说 System.Collections.Generic.Dictionary<string, double>.ValueCollection
。在我下面的尝试中,我正在转换为一个数组,但这不起作用。
DataTable source = new DataTable();
foreach (string sample in GridSource.SampleName)
{
SampleDictionaries sd = GridSource.Data.Where(x => GridSource.Data.IndexOf(x) == GridSource.SampleName.IndexOf(sample)).First();
source.Rows.Add(sample, "Average", sd.Avg.Values.ToArray());
source.Rows.Add("", "Std. Deviation", sd.StdDev.Values.ToArray());
}
上面的代码产生了这个:
我明白这里发生了什么。我的问题是:是否有一种简单的方法来告诉 DataRow "Fill the remaining column values with this collection," 或者我是否必须想出一些循环来做到这一点?
在 KMoussa 的帮助下找到了答案!
source.Rows.Add(new object[] { "", "Std. Deviation"}.Concat(sd.StdDev.Values.Cast<object>().ToArray()).ToArray());
与他推荐的非常相似,但最后缺少对数组的第二次强制转换。
您可以做的是从 datatable.NewRow() 方法创建行。然后你可以让行的项目数组等于数据数组:
DataTable source = new DataTable();
foreach (string sample in GridSource.SampleName)
{
DataRow temp = source.NewRow();
SampleDictionaries sd = GridSource.Data.Where(x => GridSource.Data.IndexOf(x) == GridSource.SampleName.IndexOf(sample)).First();
temp.ItemArray = new object[]{sample, "Average"}.Concat(sd.Avg.Values.ToArray());
source.Rows.Add(temp);
temp = source.NewRow();
temp.ItemArray = new object[]{"", "Std. Deviation".Concat(sd.StdDev.Values.ToArray());
}
我正在尝试创建一个 DataRow,它从硬编码字符串或字符串变量中获取一些值,并从集合的值中获取其余值,具体来说 System.Collections.Generic.Dictionary<string, double>.ValueCollection
。在我下面的尝试中,我正在转换为一个数组,但这不起作用。
DataTable source = new DataTable();
foreach (string sample in GridSource.SampleName)
{
SampleDictionaries sd = GridSource.Data.Where(x => GridSource.Data.IndexOf(x) == GridSource.SampleName.IndexOf(sample)).First();
source.Rows.Add(sample, "Average", sd.Avg.Values.ToArray());
source.Rows.Add("", "Std. Deviation", sd.StdDev.Values.ToArray());
}
上面的代码产生了这个:
我明白这里发生了什么。我的问题是:是否有一种简单的方法来告诉 DataRow "Fill the remaining column values with this collection," 或者我是否必须想出一些循环来做到这一点?
在 KMoussa 的帮助下找到了答案!
source.Rows.Add(new object[] { "", "Std. Deviation"}.Concat(sd.StdDev.Values.Cast<object>().ToArray()).ToArray());
与他推荐的非常相似,但最后缺少对数组的第二次强制转换。
您可以做的是从 datatable.NewRow() 方法创建行。然后你可以让行的项目数组等于数据数组:
DataTable source = new DataTable();
foreach (string sample in GridSource.SampleName)
{
DataRow temp = source.NewRow();
SampleDictionaries sd = GridSource.Data.Where(x => GridSource.Data.IndexOf(x) == GridSource.SampleName.IndexOf(sample)).First();
temp.ItemArray = new object[]{sample, "Average"}.Concat(sd.Avg.Values.ToArray());
source.Rows.Add(temp);
temp = source.NewRow();
temp.ItemArray = new object[]{"", "Std. Deviation".Concat(sd.StdDev.Values.ToArray());
}