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

posted on 2006-07-27 14:47  KADreams  阅读(2232)  评论(0)    收藏  举报