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 次 |
最近记录: |