gpt4 book ai didi

c# - DataGridView AddRange,将 IEnumerable 转换为 DataGridViewRow[](如果可能,使用 LINQ)

转载 作者:太空狗 更新时间:2023-10-30 01:16:35 46 4
gpt4 key购买 nike

如果我们想在 DataGridView 中添加一行, 除了添加 DataGridViewRow对象,我们可以通过传递对象数组 (object[])

dgv.Rows.Add(objArray); //objArray is of type object[]

但是,如果我们想将一系列行添加到 DataGridView , 我们不能通过 IEnumerable<object[]> , 但只能通过 DataGridViewRow[]

dgv.Rows.AddRange(ienumObjArray); //not allowed, ienumObjArray is of type IEnumerable<object[]>
dgv.Rows.AddRange(dgvRows); //allowed, dgvRows is DataGridViewRow[]

我的问题:有没有办法转换IEnumerable<object[]>DataGridViewRow[] (如果可能的话,使用 LINQ)这样我们就可以做这样的事情

dgv.Rows.AddRange(ienumObjArray.DoSomethingWithLinq(x => doSomething)); 

并且不需要添加 object[]一个接一个?

foreach(object[] objArray in ienumObjArray)
dgv.Rows.Add(objArray); //adding one by one, is it possible to get rid this of?

编辑:

这是在 WinForms 上完成的

编辑 2:

应用@abatishchev 的建议(没有 AddRange ),我遇到了奇怪的结果。如果我把:

ienumObjArray.Select(objArr => dgv.Rows.Add(objArr)); 

var result = ienumObjArray.Select(objArr => dgv.Rows.Add(objArr)); 

然后,dgv没有添加行。

但是如果我做了其中任何一个,

ienumObjArray.Select(objArr => dgv.Rows.Add(objArr)).ToArray();
ienumObjArray.Select(objArr => dgv.Rows.Add(objArr)).ToList();
ienumObjArray.Select(objArr => dgv.Rows.Add(objArr)).Count();

or

var result = ienumObjArray.Select(objArr => dgv.Rows.Add(objArr))
foreach(int i in result){
//do something
}

然后它工作正常!为什么会这样?

最佳答案

作为一个选项,您可以添加 AddRange DataGridViewRowCollection 的扩展方法接受 IEnumerable<object[]>作为参数:

public static class DataGridViewExtensions
{
public static void AddRange(this DataGridViewRowCollection collection, IEnumerable<object[]> rows)
{
foreach (object[] item in rows)
{
collection.Add(item);
}
}
}

有关扩展方法的更多信息:

关于c# - DataGridView AddRange,将 IEnumerable<object[]> 转换为 DataGridViewRow[](如果可能,使用 LINQ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34735610/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com