我想实现下面的功能:
当Cell更新之前(BeforeColUpdate)进行输入检查,如果输入错误的话,保持输入的值不变,并全选该Cell.
可是现在的情况是,如果我用Cancel=True那么Cell的值就变成了原来的值。如果不用Cancel=True,那么就有可能输入了错误的值。
还有一个关键问题就是执行完BeforeColUpdate的代码后,焦点不能回到那个单元格了。或者说焦点还在那里,只是文本没有被选中。
请问如何解决?

解决方案 »

  1.   

    一般你这样绑定数据库的方法我一般不用,因为不好用,但我可以告诉你,你可以用一个TEXT控件来解决你的问题是有这样的问题,你要在BeforeColUpdate记录下当前的单元格,执行完后再将焦点置回去,
      

  2.   

    再用一个Text控件就太麻烦了。
    有没有别的办法?还有,DataGrid不用数据绑定的话怎么显示数据?我也觉得没有FlexGrid好用,可是项目就要求这样,我也没有办法。各位帮忙呀!
      

  3.   

    不用数据绑定就用ADODB来连数据库,然后将要显示的值一个个填写进控件就可以,速度可能会慢点,但也不会太慢了,我算过5000条数据3秒吧,数据实在太多最好用分页的方法,新加一个TEXT控件专门用来更改数据,我本人认为不会太复杂了,不然也可以用DATAFORMAT来绑定列的数据类型
      

  4.   

    我试过了,新加一个Text控件的话位置很难控制,经常会和单元格不对齐。
    现在的问题应该是我想让DataGrid做到单元格全选怎么办?
    因为DataGrid并没有失去焦点,所以用SetFocus一定是无效的。
      

  5.   

    SETFOCUS这个怎么能用在单元格呢,只能用在控件,还有就是我不清楚你单元格全选是什么??
      

  6.   

    我说用SetFocus的意思是,如果焦点不在DataGrid上,用下面的语句可以实现。
    DataGrid1.Col = 1
    DataGrid1.Row = 1
    DataGrid1.SetFocus 
    可是现在DataGrid并没有失去焦点。而且我觉得如果是先把焦点设到别的控件上再设回来这种方法不好!谢谢!
      

  7.   

    呵,我没有这样用过,不过可以试一下SENDKEY
      

  8.   

    SendKey的问题太多了,这样的话程序有可能不稳定
      

  9.   

    你说的
    DataGrid1.Col = 1
    DataGrid1.Row = 1
    DataGrid1.SetFocus 
    是单元格焦点,
    但是有没有行焦点?
      

  10.   

    行焦点应该没有吧.
    DATAGRID用起来真的是不好用,可能是自己水平太次了吧.
    不过必须要用这个,所以还是请各位帮一下忙
      

  11.   

    我也没怎么用过datagrid控件,有没有办法让datagrid控件只能行聚焦?
      

  12.   

    我的数据库连接都是用adodc和datagrid组合,你说的问题我觉得你还是将自己想要实现的东西告诉大家,其实修改数据库有很多方法,你可以用n个textbox或label控件绑定各个字段,然后再改变不挺方便的吗?还有你也可以用rs.movenext之类东东控制记录号。
    if 输入有效 then
       adodc1.refresh
    elseif 输入无效 then
       end sub
    end if
      

  13.   

    可是绑定Text的话,位置很难控制呀。我主要就是想让它在出错后光标还是在原来的单元格里,并且内容不变为更改前的值,只是选中所有的文本等待用户处理。比如,有一个字段,长度是2,原来的数据是“11”,现在用户输入“123”,那么我就跳出一个对话框,告诉用户输入数据过长,用户点击确定后,光标回到刚才的单元格里,数据仍然是“123”,而不是在BeforeColUpdate里执行Cancel=True之后的“11”。只是“123”被反选,用户直接从键盘输入就可以更改出错的单元格。现在的情况是,如果用Cancel=True数据就变成了“11”,而且光标并没有回到单元格。谢谢!