【问题标题】:Remember selected row in DataGridView记住 DataGridView 中的选定行
【发布时间】:2010-11-12 23:10:29
【问题描述】:

我正在尝试让我的 datagridview 控件在数据刷新后记住选定的行。
DGV 数据绑定到业务对象列表:

Dim FXs As SortableBindingList(Of FX) = FX.LoadAllForBinding(FXStatus) 
Dim bs As New BindingSource
bs.DataSource = FXs

整体顺序是这样的:

  1. 用户点击一行
  2. 行索引保存在变量中
  3. 用户在弹出表单中编辑数据并在完成后关闭
  4. Datagridview 已刷新(从头开始重新绑定)
  5. 选择的行设置为之前保存的索引(在 DGV 的 DataBindingComplete 事件中)

    Me.dgvMain.Rows(_CurrentSelectedRowNo).Selected = True

这似乎工作正常,所选行设置正确(至少计数从 0 变为 1)。然而接下来发生的是调试器跳转到绑定业务对象的属性中(可能是读取它们进行绑定),因此 DataBindingComplete 事件似乎在 DataBinding 完成之前触发。

DGV 最多可以有大约 300 行,因此每次编辑行时它都会跳回零行,这对用户来说非常烦人!

我在这里做明显错误的事情吗?我应该为此使用不同的事件吗?

【问题讨论】:

  • 您是否有理由不能只编辑数据网格视图中的值?在弹出式表单中编辑数据有什么好处?
  • 基础设计,DGV 只显示部分字段。

标签: .net vb.net data-binding datagridview


【解决方案1】:

我正在做类似的事情,但没有使用网格事件来确定何时刷新。 他们在编辑表单中完成编辑后,我调用我的刷新例程。

使用网格行号的问题在于它可能在编辑之后或编辑期间发生了变化,尤其是当您支持多个用户并且您的网格是服务器上表的视图时,或者如果他们可以对网格进行排序行。

我必须使用行的 PK 值来识别更改的行,并且考虑到它们可以在编辑期间更改其中一个 pk 值,我还需要跟踪更新的 PK 值。

当他们更新一个值时,我会引发我自己的事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    相关资源
    最近更新 更多