DataGridView的SelectedRow控制问题
需求:在DataGridView调入数据结束后,高亮显示指定行(即set SelectedRow)
问题:之前尝试在DataGridView提供的BindingContextChanged事件里直接写入
Me.DataGridView1.Rows(指定行下标).Selected = True
运行报错,Rows的下标溢出
分析:跟踪发现无论是BindingContextChanged事件还是SelectionChanged事件都比想象中运行的次数多,而且无论是SelectedRow还是RowCount的改变都出乎意料。跟踪记录结果如下,UserControl为DataGridView1的容器,(US)表示改变是因为用户代码设置SelectedRow的值生效。为测试,这里在UserControl_Load()函数内数据绑定行后由用户代码设置一次SelectedRow的值:
SelectedRowChangeTo RowCountChangeTo Triggered Event
动作:New Class
NULL 0 DataGridView1_BindingContextChanged()
DataGridView1_BindingContextChanged()
UserControl_Load()
0 1 DataGridView1_SelectionChanged()
0 Actual Count DataTableAdapter.Fill()
(US) DataGridView1_SelectionChanged()(In UserControlLoad)
DataGridView1_SelectionChanged()(After UserControl_Load)
0 1 DataGridView1_SelectionChanged()
0 Actual Count DataGridView1_BindingContextChanged()
动作:Click Any Row(If SelectedRow is Changed)
Current Index DataGridView1_SelectionChanged()
动作:Click Any Row(If SelectedRow is not Changed)
Current Index DataGridView1_CellClick()
动作:Click Head(Case 1)
Current Index DataGridView1_CellClick()
0 DataGridView1_SelectionChanged()
Current Index Actual Count DataGridView1_SelectionChanged()
DataGridView1_Sorted()
New Index(US) DataGridView1_SelectionChanged()
DataGridView1_Sorted()
动作:Click Head(Case 2)
Current Index DataGridView1_CellClick()
0 DataGridView1_SelectionChanged()
New Index(US) Actual Count DataGridView1_SelectionChanged()
DataGridView1_Sorted()
解决办法:
在设置指定行加入If Me.DataGridView1.RowCount > 0的条件,否则不做任何事,即(为简单,这里只举单行的情况)
If Me.DataGridView1.RowCount > 0 Then Me.DataGridView1.Rows(指定行下标).Selected = True
浙公网安备 33010602011771号