- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
如果我们想在 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/
我有一个 DataGridView,其中包含三个不同的 DataColumns 的未绑定(bind)数据。行可以按每一列排序,但除此之外不允许对显示的数据进行任何操作。 当我查询 SelectedRo
我正在使用以下代码将一堆 DataGridViewRow 元素设置为不可见。我使用的规则是检查关联数据源的 bool 标志。如果标志为真,将显示该行。否则,它将不可见。 以下代码有效;然而,这样做会花
我想将 DataGridviewRow 作为 ref 传递给它的单元格,但我无法这样做 foreach(DataGridViewRow dgr in dgvMarksEntryByClassWise.
我正在尝试遍历 DataGridView 中的两列并将它们添加到如下坐标中 foreach (DataGridView row in dataGridView1.Rows) { double
我遇到了一个有趣的问题。当我只将一个 DataGridViewRow 添加到 DataGridView 时,一切都按预期工作:DataGridView.Rows[0] 是添加的行。当我以某种方式添加第
在 Windows 窗体中,我试图通过向其插入 DataGridViewRows 来手动填充 DataGridView,因此我的代码如下所示: DataGridViewRow row = new Da
我是 C# 新手,对“var”的使用有疑问 当我使用下面的代码时一切正常 foreach(DataGridViewRow row in myGrid.Rows) { if (row.Cells
我在 Windows 窗体应用程序(用 C# 编写)上有一个 DataGridView 控件。 我需要的是:当用户选择一个 DataGridViewRow,然后单击“删除”按钮时,应该删除该行并且接下
这有效: DataGridView.Rows.Add("Bla Bla Bla", value1, value2) 但如果我这样做: Dim newrow As New DataGridViewRow
我在将 .AsParallel 转换为 Parallel.ForEach 时遇到问题。我有一个 DataGridView,然后我将一些值放在它的第一列中,然后使用 ForEach 循环将值发送到方法,
我注意到在 DataGridView 控件中设置行高很慢。有没有办法让它更快? 最佳答案 我自己造成类似布局延迟的原因与AutoSizeRowsMode 和 AutoSizeColumnsMode
我在其他地方看到过此问题的解决方案,但它们都使用将 DataRowView 设置为等于我的 DataGridViewRow.DataBoundItem,然后使用 DataRowView.Row 属性(
我有一个 DataGridView myGridView.DataSource = GetSomeData() // method called public IQueryable GetSomeDa
我正在尝试在 DataGridView 中显示行。 代码如下: foreach (Customers cust in custList) { s
我正在尝试找出我支持的应用程序中的某些行为。片段是: foreach (DataGridViewRow pGridRow in grdEmail.Rows) { pGridRow.Cells[
这行不通。 var result = from row in grid.Rows where (string) row.Cells["COLUMN_1"].Value == "Test
我正在尝试获取具有最大记录 ID 值的 DataGridViewRow。我能够获取记录 ID 本身,但我需要找到行本身。 这是我获取最大记录 ID 的代码,它工作正常: var addedRow =
当我使用 DataTable作为DataGridView的 DataSource ,我经常需要找到用户选择了哪些行并从 DataTable 中读取特定值(不是 DataGridView) 我想知道是否
在我不断寻求更好地理解 .NET 中的线程安全编程的过程中,我似乎无法弄清楚一个问题,因此我希望 SO 上的某个人可以提供帮助。 我了解,在不使用 Control.Invoke 或 Control.B
我想在触发 DataTable 事件(特别是 DataColumnChangeEvent)时更改 DataGridViewRow 的前景色。为此,我需要获取事件发生所在行的关联 DataGridVie
我是一名优秀的程序员,十分优秀!