Ian*_*Ian 5 c# linq datagridview rows winforms
如果我们想向 a 添加一行DataGridView,除了添加一个DataGridViewRow对象之外,我们还可以通过传递一个对象数组 ( object[])来实现
dgv.Rows.Add(objArray); //objArray is of type object[]
Run Code Online (Sandbox Code Playgroud)
但是,如果我们想向 a 添加一定范围的行DataGridView,则不能通过IEnumerable<object[]>,而只能通过DataGridViewRow[]
dgv.Rows.AddRange(ienumObjArray); //not allowed, ienumObjArray is of type IEnumerable<object[]>
dgv.Rows.AddRange(dgvRows); //allowed, dgvRows is DataGridViewRow[]
Run Code Online (Sandbox Code Playgroud)
我的问题:是否有任何方法可以强制IEnumerable<object[]>转换DataGridViewRow[](如果可以使用 LINQ),以便我们可以执行类似的操作
dgv.Rows.AddRange(ienumObjArray.DoSomethingWithLinq(x => doSomething));
Run Code Online (Sandbox Code Playgroud)
并且不需要object[]一一添加?
foreach(object[] objArray in ienumObjArray)
dgv.Rows.Add(objArray); //adding one by one, is it possible to get rid this of?
Run Code Online (Sandbox Code Playgroud)
编辑:
这是完成于WinForms
编辑2:
应用@abatishchev的建议(没有AddRange),我遇到了奇怪的结果。如果我输入:
ienumObjArray.Select(objArr => dgv.Rows.Add(objArr));
Run Code Online (Sandbox Code Playgroud)
或者
var result = ienumObjArray.Select(objArr => dgv.Rows.Add(objArr));
Run Code Online (Sandbox Code Playgroud)
然后,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
}
Run Code Online (Sandbox Code Playgroud)
然后就可以正常工作了!为什么会这样呢?
作为一个选项,您可以添加一个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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
有关扩展方法的更多信息:
| 归档时间: |
|
| 查看次数: |
1858 次 |
| 最近记录: |