DataGridView1选定某行后,数据刷新后如何将行焦点重新定位到原选定行?

lantianhf 2009-04-01 10:13:52

DataGridView1选定某行后,数据刷新后如何将行焦点重新定位到原选定行?
...全文
619 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tj3004204004 2009-04-21
  • 打赏
  • 举报
回复
有主键才行
Dim a As Object = Me.DataGridView1.CurrentRow.Cells("主键").Value
''重新填充
'’
Dim i As Integer
Dim n As Integer = Me.DataGridView1.BindingContext(DataGridView1.DataSource, DataGridView1.DataMember).Count
For i = 0 To n
If a.Equals(Me.DataGridView1.Rows(i).Cells("主键")) Then
Me.DataGridView1.Rows(i).Selected = True
End If
Next
tj3004204004 2009-04-21
  • 打赏
  • 举报
回复
有主键才行
Dim a As Object = Me.DataGridView1.CurrentRow.Cells("主键").Value
''重新填充
'’
Dim i As Integer
Dim n As Integer = Me.DataGridView1.BindingContext(DataGridView1.DataSource, DataGridView1.DataMember).Count
For i = 0 To n
If a.Equals(Me.DataGridView1.Rows(i).Cells("主键")) Then
Me.DataGridView1.Rows(i).Selected = True
End If
Next
一只熊猫 2009-04-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 leayh 的回复:]
上面的都不太可行,因为数据刷新后行可能增加或者减少。正确的做法是Grid中的数据一定要有主键,然后多显示一个主键列并隐藏起来,当选中那一行后,先保存主键,刷新后,再通过主键找到那一行并定位。
[/Quote]

顶这个办法,但这个方法有个小问题:数据量比较大的时候性能就低了。
我推荐用另一个办法,后台更新表后,不要把DataGridview全部刷新,就刷新被修改的行。注意下新增和删除行的情况就OK了。
leayh 2009-04-01
  • 打赏
  • 举报
回复
上面的都不太可行,因为数据刷新后行可能增加或者减少。正确的做法是Grid中的数据一定要有主键,然后多显示一个主键列并隐藏起来,当选中那一行后,先保存主键,刷新后,再通过主键找到那一行并定位。
lantianhf 2009-04-01
  • 打赏
  • 举报
回复

声明:用的是 DataGridView1
outou 2009-04-01
  • 打赏
  • 举报
回复
本文来自http://bingning.net/VB/SOURCE/index.html
先取得被选择中的行。

'被选择的行取得
'行数的取得
Dim n As Integer = _
DataGrid1.BindingContext(DataGrid1.DataSource, _
DataGrid1.DataMember).Count
Dim i As Integer
For i = 0 To n - 1
'检测行是否被选择
If DataGrid1.IsSelected(i) Then
'如果被选择表示被选择行的号码
Console.WriteLine(i)
End If
Next


再滚动到被指定的行。

Imports System
Imports System.Windows.Forms

Public Class MyDataGrid
Inherits DataGrid

''' &lr;summary>
''' 设置DataGrid最初被表示的行
''' &lr;/summary>
''' &lr;param name="rowNum">DataGrid的最初被表示的行的号码&lr;/param>
Public Sub SetTopRow(ByVal rowNum As Integer)
Dim args As New ScrollEventArgs( _
ScrollEventType.LargeIncrement, rowNum)
GridVScrolled(Me, args)
End Sub
End Class

GuanXX 2009-04-01
  • 打赏
  • 举报
回复
刷新前记住它的位置比如(rowIndex),然后重新定位,如
DataGridView.CurrentCell = DataGridView(columnIndex , rowIndex)

或者bindingSource.Position = rowIndex
ycfbhsk 2009-04-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 leayh 的回复:]
上面的都不太可行,因为数据刷新后行可能增加或者减少。正确的做法是Grid中的数据一定要有主键,然后多显示一个主键列并隐藏起来,当选中那一行后,先保存主键,刷新后,再通过主键找到那一行并定位。
[/Quote]
这个方法可行。


刷新后,清除了以前选择的行,这时根据需要把曾经选择的行记下来,刷新后再重新选择。

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧