本帖最后由 bbsstrange 于 2014-07-15 13:18:31 编辑

解决方案 »

  1.   

    把KeyDown事件里面的代码全注释掉试试。可能是GridView自带这样的功能
      

  2.   


    其实gvOldBill.FocusedRowHandle = gvOldBill.RowCount - 1;这个指向的确实是最后一条的行号,但是页面显示获取焦点的行,却是前一行,不知道是为什么?
      

  3.   

    每次响应上下键,你都计算一下呢。gvOldBill.FocusedRowHandle = 行索引;这样应该不会串行了吧
      

  4.   

    gridControl 本身有使用上下键进行选择的功能,每次keyDown,等于重复执行了2次,当然选择第二行。
    另外你的if条件语句中最后一个条件没有必要要。
    在你的代码 MoveFirst(); 后添加e.Handled = true;就可以了。bsOldBill.MoveLast();之后一样。if (e.KeyCode == Keys.Down)//当前项为最后一项,且按向下键时,则跳转至第一条
                {
                    if (gridView1.FocusedRowHandle == gridView1.RowCount - 1)
                    {
                        gridView1.MoveFirst();
                        e.Handled = true;
                    }
                }
                if (e.KeyCode == Keys.Up)//当前项为最后一项,且按向下键时,则跳转至第一条
                {
                    if (gridView1.FocusedRowHandle == 0)
                    {                    gridView1.MoveLast();
                        e.Handled = true;
                    }
                }
      

  5.   

    另外 ,这种需求根本不涉及到什么计算之类的,要不太坑爹。
    看方法的定义,public virtual void MoveFirst()它是个虚方法,只需要实现一下就可以使用。
      

  6.   


    就是缺了这个 e.Handled = true;,非常感谢