c#datagrid的每行的单击事件

需要一个帮助类

using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Threading;

namespace Common
{
    public class MouseClickManager
    {
        public event MouseButtonEventHandler Click;
        public event MouseButtonEventHandler DoubleClick;

        private bool Clicked { get; set; }
        
        public Control Control { get; set; }

        public int Timeout { get; set; }

        public MouseClickManager(Control control, int timeout)
        {
            this.Clicked = false;
            this.Control = control;
            this.Timeout = timeout;
        }

        public void HandleClick(object sender, MouseButtonEventArgs e)
        {
            lock (this)
            {
                if (this.Clicked)
                {
                    this.Clicked = false;
                    OnDoubleClick(sender, e);
                }
                else
                {
                    this.Clicked = true;
                    ParameterizedThreadStart threadStart = new ParameterizedThreadStart(ResetThread);
                    Thread thread = new Thread(threadStart);
                    thread.Start(e);
                }
            }
        }

        private void ResetThread(object state)
        {
            Thread.Sleep(this.Timeout);

            lock (this)
            {
                if (this.Clicked)
                {
                    this.Clicked = false;
                    OnClick(this, (MouseButtonEventArgs)state);
                }
            }
        }

        private void OnClick(object sender, MouseButtonEventArgs e)
        {
            MouseButtonEventHandler handler = Click;

            if (handler != null)
                this.Control.Dispatcher.BeginInvoke(handler, sender, e);
        }

        private void OnDoubleClick(object sender, MouseButtonEventArgs e)
        {
            MouseButtonEventHandler handler = DoubleClick;

            if (handler != null)
                handler(sender, e);
        }
    }
}
View Code
<sdk:DataGrid Grid.Row="0" AutoGenerateColumns="False" SelectionMode="Single"  IsReadOnly="True" x:Name="dataGrid" LoadingRow="DataGrid_LoadingRow" />

private readonly MouseClickManager _gridClickManager;  //声明,需要引入上面定义的类
this._gridClickManager = new MouseClickManager(this.dataGrid,300);//实例化,并指向需要控制的空间名称(this.DataGrid).放在构造函数中
this._gridClickManager.DoubleClick += new System.Windows.Input.MouseButtonEventHandler(_gridClickManager_DoubleClick);//委托双击事件.放在构造函数中

 void _gridClickManager_DoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)  //双击事件的实现
 {
    //doSomething(); 
 }
 private void DataGrid_LoadingRow(object sender, DataGridRowEventArgs e)        //给表中的每一行加载双击事件
{
     e.Row.MouseLeftButtonUp+=_gridClickManager.HandleClick; 
}

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

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

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

转载于:https://www.cnblogs.com/lwngreat/p/4873837.html

要实现C# DataGrid的升降序排序,可以通过以下步骤来完成: 1. 首先,确保你的DataGrid控件已经正确地绑定了数据源。可以通过设置`ItemsSource`属性来绑定数据源,例如: ``` <DataGrid ItemsSource="{Binding}" x:Name="DataGrid1" ... /> ``` 2. 在点击DataGrid或其他与DataGrid相关的方法中,你可以使用以下代码来获取当前选中的行的数据: ```csharp DataRowView dwView = ((((System.Windows.Controls.DataGrid)DataGrid1).SelectedItem) as DataRowView); ``` 3. 接下来,根据需要进行升序或降序排序。可以根据选中列的数据类型进行不同的排序操作。下面是一个示例代码来对字符串类型的列进行升序排序: ```csharp DataView dataView = (DataView)DataGrid1.ItemsSource; dataView.Sort = "ColumnName ASC"; ``` 可以将"ColumnName"替换为你要排序的列名。ASC表示升序排序,DESC表示降序排序。 4. 最后,刷新DataGrid以显示排序后的结果。可以使用以下代码实现: ```csharp DataGrid1.ItemsSource = dataView; DataGrid1.Items.Refresh(); ``` 这样就完成了C# DataGrid的升降序排序。请根据你的实际需求进行相应的调整和修改。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [WPF DataGrid 添加数据 与 删除数据](https://blog.csdn.net/siyueliangjuan/article/details/108272358)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值