需要一个帮助类

  1. using System;
  2. using System.Net;
  3. using System.Windows;
  4. using System.Windows.Controls;
  5. using System.Windows.Documents;
  6. using System.Windows.Ink;
  7. using System.Windows.Input;
  8. using System.Windows.Media;
  9. using System.Windows.Media.Animation;
  10. using System.Windows.Shapes;
  11. using System.Threading;
  12.  
  13. namespace Common
  14. {
  15. public class MouseClickManager
  16. {
  17. public event MouseButtonEventHandler Click;
  18. public event MouseButtonEventHandler DoubleClick;
  19.  
  20. private bool Clicked { get; set; }
  21.  
  22. public Control Control { get; set; }
  23.  
  24. public int Timeout { get; set; }
  25.  
  26. public MouseClickManager(Control control, int timeout)
  27. {
  28. this.Clicked = false;
  29. this.Control = control;
  30. this.Timeout = timeout;
  31. }
  32.  
  33. public void HandleClick(object sender, MouseButtonEventArgs e)
  34. {
  35. lock (this)
  36. {
  37. if (this.Clicked)
  38. {
  39. this.Clicked = false;
  40. OnDoubleClick(sender, e);
  41. }
  42. else
  43. {
  44. this.Clicked = true;
  45. ParameterizedThreadStart threadStart = new ParameterizedThreadStart(ResetThread);
  46. Thread thread = new Thread(threadStart);
  47. thread.Start(e);
  48. }
  49. }
  50. }
  51.  
  52. private void ResetThread(object state)
  53. {
  54. Thread.Sleep(this.Timeout);
  55.  
  56. lock (this)
  57. {
  58. if (this.Clicked)
  59. {
  60. this.Clicked = false;
  61. OnClick(this, (MouseButtonEventArgs)state);
  62. }
  63. }
  64. }
  65.  
  66. private void OnClick(object sender, MouseButtonEventArgs e)
  67. {
  68. MouseButtonEventHandler handler = Click;
  69.  
  70. if (handler != null)
  71. this.Control.Dispatcher.BeginInvoke(handler, sender, e);
  72. }
  73.  
  74. private void OnDoubleClick(object sender, MouseButtonEventArgs e)
  75. {
  76. MouseButtonEventHandler handler = DoubleClick;
  77.  
  78. if (handler != null)
  79. handler(sender, e);
  80. }
  81. }
  82. }
  1. <sdk:DataGrid Grid.Row="" AutoGenerateColumns="False" SelectionMode="Single" IsReadOnly="True" x:Name="dataGrid" LoadingRow="DataGrid_LoadingRow" />
  2.  
  3. private readonly MouseClickManager _gridClickManager; //声明,需要引入上面定义的类
  4. this._gridClickManager = new MouseClickManager(this.dataGrid,);//实例化,并指向需要控制的空间名称(this.DataGrid).放在构造函数中
  5. this._gridClickManager.DoubleClick += new System.Windows.Input.MouseButtonEventHandler(_gridClickManager_DoubleClick);//委托双击事件.放在构造函数中
  6.  
  7. void _gridClickManager_DoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e) //双击事件的实现
  8. {
  9. //doSomething();
  10. }
  11. private void DataGrid_LoadingRow(object sender, DataGridRowEventArgs e) //给表中的每一行加载双击事件
  12. {
  13. e.Row.MouseLeftButtonUp+=_gridClickManager.HandleClick;
  14. }

http://blog.csdn.net/bychentufeiyang/article/details/7066347

http://blog.csdn.net/haukwong/article/details/7077711

http://www.xuebuyuan.com/261369.html

c#datagrid的每行的单击事件的更多相关文章

  1. 在WPF的DataGrid中对行添加单击事件

    在做的一个c#的项目中发现Datagrid没办法直接对鼠标单击进行响应,调用MouseDown事件也需要点击某一行第二次才能响应.所以借助EventSetter来简单的实现了一个. 界面部分的代码 & ...

  2. easyui datagrid editor checkbox 单击事件

    Easyui datagrid treegrid中能够为行追加checkbox元素.比如: $('#tt').treegrid({ url:'get_data.php', idField:'id', ...

  3. Silverlight 利用DataGrid行加载事件动态控制行列显示

    datagrid的绑定很好用,但有时候我们往往需要根据model内容来动态控制行或者列,该怎么办呢? 这时候,我们就需要用到行加载事件:在加载每一行数据的时候,根据数据的内容来控制相应的表格显示. 比 ...

  4. 扩展 easyui 控件系列:为datagrid 增加过滤行

    此功能还为真正完成,起到抛砖引玉的效果,发动大家的力量把这个功能完善起来,效果图如下: 基本上就是扩展了 datagrid.view 中的onAfterRender 这个事件,具体代码如下: $.ex ...

  5. Android代码规范----按钮单击事件的四种写法

    [前言] 按钮少的时候用第三种的匿名内部类会比较快,比如写demo测试的时候或者登陆界面之类. 按钮多的时候一般选择第四种写法. 一.第一种写法:在XML文件中声明onClick属性(很少用) 在XM ...

  6. GridView中添加行单击事件.md

    [toc] 1.使用说明 1.方法来源 该方法主要参考StackOverflow上面的答案和下面这篇文章 http://www.codeproject.com/Articles/15677/Click ...

  7. EasyUI datagrid 明细表格中编辑框 事件绑定 及灵活计算 可根据此思路 扩展其他

    原创 : EasyUI datagrid 明细表格中编辑框 事件绑定 及灵活计算 可根据此思路 扩展其他 转载,请注明出处哦!谢谢! 原创 : EasyUI datagrid 明细表格中编辑框 事件绑 ...

  8. JS事件 鼠标单击事件( onclick )通常与按钮一起使用。onclick是鼠标单击事件,当在网页上单击鼠标时,就会发生该事件。同时onclick事件调用的程序块就会被执行

    鼠标单击事件( onclick ) onclick是鼠标单击事件,当在网页上单击鼠标时,就会发生该事件.同时onclick事件调用的程序块就会被执行,通常与按钮一起使用. 比如,我们单击按钮时,触发  ...

  9. GridView点击行触发SelectedIndexChanged事件

    1.在<% @Page ...... %>指令中添加 EnableEventValidation="false" 2.在RowDataBound事件中添加 protec ...

随机推荐

  1. YUI Array 之some(检测|any)

    YUI原码 YUI someYArray.some = Lang._isNative(Native.some) ? function (array, fn, thisObj) { return Nat ...

  2. php中12个魔术方法

    本文列举了php面向对象当中12个魔术方法,并对此进行一一详细介绍,希望对新手有所帮助. 1.构造方法: __construct() 参数:自定义 触发时机:new的一瞬间自动调用 作用:初始化成员属 ...

  3. 用IO流拷贝歌曲

    package lianxi; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOEx ...

  4. javascript string对象的属性与方法

    一 创建string对象 new string('string'); 更直接的定义方法是var str = 'string'; 二 string属性 1.constructor 2.lenght 字符 ...

  5. jQuery插件之Form

    一.jQuery.Form.js 插件的作用是实现Ajax提交表单. 方法: 1.formSerilize() 用于序列化表单中的数据,并将其自动整理成适合AJAX异步请求的URL地址格式. 2.cl ...

  6. g++ error: expected nested-name-specifier before 'XXX'

    template <typename addrT=int,typename valuT=int,typename stream_addrT=bm_addr,typename stream_siz ...

  7. 使用sp_configure启用 'Ad Hoc Distributed Queries'

    使用sp_configure启用 'Ad Hoc Distributed Queries' 原文地址:http://blog.sina.com.cn/s/blog_531bb7630100xh88.h ...

  8. ubuntu查看硬件信息

    1,外部探针probe sudo apt-get install hwinfo 执行hwinfo获取系统信息 --short

  9. linux 安装gcc和g++

    linux中安装gcc和g++ 今天在linux的服务器上安装C/C++的编译器gcc和g++,运行了如下两条命令: 1 yum install gcc yum install g++ 然后发现gcc ...

  10. [每日一题] 11gOCP 1z0-052 :2013-09-25 Lock ――for update.................................C23

    转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/12021587 正确答案:ABE 这道题需要我们了解锁的知识点. TM锁的模式: 0-Non ...