找回密码
 立即注册

QQ登录

只需一步,快速开始

dingchuan

论坛元老

6

主题

23

帖子

4026

积分

论坛元老

积分
4026

活字格认证

最新发帖
dingchuan
论坛元老   /  发表于:2012-10-15 13:36  /   查看:11424  /  回复:14
你好,我在使用c1:C1DataGrid时碰到些问题不知道怎么解决,麻烦帮下忙
我想实现双击datagrid中的某条记录时取得该条记录中的某列信息。
不知道怎么针对datagrid中的单条记录添加双击事件。
我现在的做法是针对整个datagrid添加MouseLeftButtonUp事件
在MouseLeftButtonUp事件中判断本次点击和前次点击的时间间隔小于某个时间(比如300毫秒)
达到模拟双击的效果。问题是现在我点击datagrid中没有数据的地方,
也会触发这个MouseLeftButtonUp事件,
有没有办法让我只针对数据的每条记录添加MouseLeftButtonUp事件.

14 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2012-10-15 16:59:00
沙发
回复 1楼dingchuan的帖子

dingchuan 你好,
目前无法实现“只针对数据的每条记录添加MouseLeftButtonUp事件”,不过可以通过以下代码判读当前单元格是否有数据:

  1. private void c1datagrid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
  2.         {
  3.             int cur_Row=this.c1datagrid.CurrentRow.Index;
  4.             int cur_Col=this.c1datagrid.CurrentColumn.Index;
  5.             if (string.IsNullOrWhiteSpace(this.c1datagrid[cur_Row,cur_Col].ToString()))
  6.             {
  7.                 //进行操作
  8.             }
  9.             else
  10.             {
  11.                 return;
  12.             }
  13.         }
复制代码
回复 使用道具 举报
dingchuan
论坛元老   /  发表于:2012-10-16 09:26:00
板凳
回复 2楼iceman的帖子

你好~

int cur_Row=this.c1datagrid.CurrentRow.Index;
int cur_Col=this.c1datagrid.CurrentColumn.Index;
请问这两行代码取得的是当前被双击的位置吗?还是说当前选中行的位置啊?
我昨天后来自己试验,试着加了以下的判断
private void c1datagrid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            Point currentPoint = e.GetPosition(null);

            if (currentPoint == null)
            {
                return;
            }

            var cell = this.c1datagrid.GetCellFromPoint(currentPoint);

            if (cell == null)
            {
                return;
            }
            //进行操作
}
请问我这样做跟你的代码实现上有什么区别啊,我这样做可以吗
回复 使用道具 举报
dingchuan
论坛元老   /  发表于:2012-10-16 09:37:00
地板
另外,silverlight自己提供的datagrid都可以实现只“只针对数据的每条记录添加MouseLeftButtonUp事件”,就是在datagrid的LoadingRow事件中添加以下代码

  1.         private void dataGrid_LoadingRow(object sender, System.Windows.Controls.DataGridRowEventArgs e)
  2.         {
  3.             e.Row.MouseLeftButtonUp += this.Row_MouseLeftButtonUp;
  4.         }
复制代码

可是c1:C1DataGrid的LoadingRow事件用到的不是System.Windows.Controls.DataGridRowEventArgs
而是C1.Silverlight.DataGrid.DataGridRowEventArgs
这样e.Row.MouseLeftButtonUp 就不好用了,不知道为什么C1.Silverlight.DataGrid.DataGridRowEventArgs
中会把e.Row的MouseLeftButtonUp 事件给禁用了。感觉C1应该是在系统的控件上去丰富内容,而不应该禁用原本的内容啊。
感觉怪怪的。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-10-16 18:23:00
5#
回复 3楼dingchuan的帖子

dingchuan 你好,
2# 中方法是通过判断当前点击单元格索引来判断单元格是否存在数据的。和你的代码效果不同。
4# 中的代码可以发个 Demo 上来调试吗?我无法添加:
  1.   e.Row.MouseLeftButtonUp += this.Row_MouseLeftButtonUp;
复制代码
回复 使用道具 举报
dingchuan
论坛元老   /  发表于:2012-10-17 09:24:00
6#
你们这上传附件总失败,没办法发工程啊
.xaml代码

  1. <UserControl x:Class="demo.MainPage"
  2.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  5.     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  6.     mc:Ignorable="d"
  7.              xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
  8.     d:DesignHeight="300" d:DesignWidth="400">

  9.     <Grid x:Name="LayoutRoot" Background="White">
  10.         <sdk:DataGrid x:Name="dgUserList" AutoGenerateColumns="False" Width="300" >
  11.             <sdk:DataGrid.Columns>
  12.                 <sdk:DataGridTextColumn Binding="{Binding id}" Header="ID" Width="*"  />
  13.                 <sdk:DataGridTextColumn Binding="{Binding name}" Header="NAME" Width="*"/>
  14.                 <sdk:DataGridTextColumn Binding="{Binding sex}" Header="SEX" Width="*"/>
  15.             </sdk:DataGrid.Columns>
  16.         </sdk:DataGrid>
  17.     </Grid>
  18. </UserControl>
复制代码

.cs代码

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Net;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using System.Windows.Documents;
  8. using System.Windows.Input;
  9. using System.Windows.Media;
  10. using System.Windows.Media.Animation;
  11. using System.Windows.Shapes;

  12. namespace demo
  13. {
  14.     public partial class MainPage : UserControl
  15.     {
  16.         public MainPage()
  17.         {
  18.             InitializeComponent();

  19.             this.dgUserList.LoadingRow += this.DgUserList_LoadingRow;

  20.             List<UserInfo> userList = new List<UserInfo>();

  21.             UserInfo userInfo = null;

  22.             for(int i = 0; i < 4; i++)
  23.             {
  24.                 userInfo = new UserInfo();

  25.                 userInfo.id = i + string.Empty;
  26.                 userInfo.name = i + string.Empty;
  27.                 userInfo.sex = i + string.Empty;

  28.                 userList.Add(userInfo);
  29.             }

  30.             this.dgUserList.ItemsSource = userList;
  31.         }

  32.         private void DgUserList_LoadingRow(object sender, System.Windows.Controls.DataGridRowEventArgs e)
  33.         {
  34.             e.Row.MouseLeftButtonUp += this.Row_MouseLeftButtonUp;
  35.         }

  36.         private void Row_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
  37.         {
  38.             MessageBox.Show("id=========" + (this.dgUserList.SelectedItem as UserInfo).id);
  39.         }

  40.         public class UserInfo
  41.         {
  42.             public String id { get; set; }
  43.             public String name { get; set; }
  44.             public String sex { get; set; }
  45.         }
  46.     }
  47. }

复制代码
回复 使用道具 举报
admin讲师达人认证 悬赏达人认证 活字格认证 SpreadJS 开发认证
管理员   /  发表于:2012-10-17 09:48:00
7#
回复 6楼dingchuan的帖子

上传失败的原因可能是你的杀毒软件防火墙没关。
回复 使用道具 举报
dingchuan
论坛元老   /  发表于:2012-10-17 10:57:00
8#
啊,对,可能是我们公司给屏蔽了。我用的是silverlight5.0 系统的datagrid中就可以直接做。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-10-17 11:57:00
9#
回复 8楼dingchuan的帖子

请问你使用 C1SL 的版本是?
回复 使用道具 举报
dingchuan
论坛元老   /  发表于:2012-10-17 15:29:00
10#
用的也是5的版本啊 应该就是最新的吧。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部