Datagrid事件响应(二)

时间:2010-03-16 17:38:16  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:处理问题的方法应用到对其它控件的使用中去。      本文主要解决在Datagrid中任意点击一个格子,都会出现选中一行的需求。通过本文,您也会了解焦点与控件的关系。      这个问题看上去很简单,但是,如果您平时留心的话,每次点击单元格时,我们就会点击到一个格子的内部,而不会选中一行。想要选中一行,只能点击每行...
  正文: hi, 大家好。对于windows form中的datagrid控件的使用,我已经写了不少文章了,但也不断地收到网友的意见,希望再多写一点。应朋友的要求,我会再针对几个问题写一些文章,希望能带给您一点启发,能够熟练地使用Datagrid,更主要是希望您能举一反三,将处理问题的方法应用到对其它控件的使用中去。
  
  本文主要解决在Datagrid中任意点击一个格子,都会出现选中一行的需求。通过本文,您也会了解焦点与控件的关系。
  
  这个问题看上去很简单,但是,如果您平时留心的话,每次点击单元格时,我们就会点击到一个格子的内部,而不会选中一行。想要选中一行,只能点击每行的行头。
  
  有朋友会说,就还不简单,我们可以把处理代码写在datagrid的mousedown事件处理程序中,用 hitTest判断选中的是哪一行哪一列的那个格子,然后就select那一行。
  
  但是,……。当你照着做一下就会发现,不对了!每次点击了以后,还是老样子,焦点跑到textbox内部去了。这……
  
  难道是Datagrid偷赖没有做我们要求它做的事!哦,你冤枉它了,其实它还是执行了的!只不过执行的速度太快了,我们根本没看清人家工作的结果。是谁动了它的奶酪?
  
  如果你看过我以前的文章,应该就不难理解:用户鼠标向Datagrid的一格点去->Datagrid先接收到焦点,执行你要求它的事件->然后焦点就会落入此格内嵌的textbox中去,使textbox聚焦。(详细分析,请看拙作《Datagrid事件响应(一) 》)
  
  明白了吧,在datagrid刚刚执行了选中一行的操作之后,它内嵌的textbox就会引发一个聚焦事件,致使datagrid不再选中一行,而是把焦点更改到你所点击的内嵌textbox中去了。
  
  所以,现在的解决思路就应该是:把代码写在焦点刚落入到datagrid内嵌的textbox中时的那个事件里。而对于textbox来说,焦点的落入与离开的过程都会激发什么事件,我们应该在什么事件中去写选中当前行的代码呢?
  
  按顺序来说,焦点会引发的控件事件为:
  
  顺序号
  
  
  事件名
  
  
  事件意义
  
  1
  
  
  Enter
  
  
  焦点进入了控件
  
  2
  
  
  GotFocus
  
  
  控件接收了焦点
  
  3
  
  
  Leave
  
  
  输入焦点离开了控件
  
  4
  
  
  Validating
  
  
  控件正在进行验证
  
  5
  
  
  Validated
  
  
  控件完成了验证
  
  6
  
  
  LostFocus
  
  
  控件失去焦点
  
  那么,第一个会被引发的事件就是Enter了!好了,我们开工吧!
  
  现在把要做的工作梳理一下:
  
  (1) 找一个用于Datagrid的绑定数据源,使Datagrid有显示的数据;
  
  (2) 要写Datagrid内嵌的控件的事件处理程序,当然需要重新定义Datagrid的DataGridTableStyle;
  
  (3) 把Enter事件指派给每一个列风格GridColumnStyles;
  
  (4) 编写一个内嵌textbox的Enter事件处理程序;
  
  (5) 打完收工!
  
  程序如下:
  
  dim Dataset1 as New DataSet
  
  Dim dt As DataTable’
  
   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
"Datagrid事件响应(二)"由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Programming/aspnet/13248.html


关键字:

关于《Datagrid事件响应(二)》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td