【问题标题】:C# - Most efficient way of changing the value of a cell in each row within a DataGridViewC# - 更改 DataGridView 中每一行中单元格值的最有效方法
【发布时间】:2017-06-20 17:31:48
【问题描述】:

我正在寻找有关更改 DataGridView 中每一行的单元格值的最有效方法的建议。 我认为可能有不同的方法来实现这一点,但我不想在没有一些建议的情况下开始编码并最终走错路。

值将始终在同一列中,是否可以使用 foreach 循环遍历 DGV 中的每一行,读取正确列上的行内的数据,并简单地使用类似 row[columnIndex] = "x value"; 的内容 或者我最好将所有 DGV 数据放入数据表中,更新数据,然后将其重新应用到 DataGridView。

谢谢

【问题讨论】:

  • 您没有指定DataGridView 最初是如何填充的?如果它当前有一个DataSource,那么你会想要使用它。如果网格没有数据绑定,那么@Ikram Turgunbaev 的解决方案就是您拥有DataTable 的方法。循环遍历行并在必要时创建DataTable
  • 我不想在没有任何建议的情况下开始编码并最终走错路 - 错误的方法。只有你知道你的应用程序的“实际”上下文——从一些东西开始——然后阅读建议。不做任何你不明白的建议
  • 请注意,您可以寻址单元格dgv1(colIndex,rowIndex) 我认为您可能正在寻找“优雅”而不是“高效” - 除非您有大量数据。

标签: c# winforms datagridview datatable


【解决方案1】:

在我的情况下,它将使用bindingsource

使用bindingsourcesource 的每次更改都会影响control,并且对control 的每次更改都会影响source

DataTable dt = GetTable();
BindingSource bs = new BindingSource();
bs.DataSource = dt;
dataGridView1.DataSource = bs;

foreach(DataRow row in dt.Rows)
{
   row.BeginEdit();
   row.["SomeColumn"] = somevalue;
   row.EndEdit();
}

【讨论】:

  • 这比foreach(DataGridViewRow row in DataGridView1.Rows)..效率高吗?
  • 在他的情况下,他说“或者我最好将所有 DGV 数据放入数据表中,更新数据,然后将其重新应用到 DataGridView。”。所以我认为使用 bindingsource 效率更高
  • 为什么要使用绑定源?使用数据表(或派生的数据视图)不会对 OP 起作用吗?绑定源当然更强大msdn.microsoft.com/en-us/library/xxxf124e(v=vs.110).aspx
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多