zxc9089 发表于 2017-2-7 18:38:31

C1FlexGrid 中如何根据其中元素找到当前行?

C1DataGrid 中有 GetCellFromFrameworkElement 方法获取到元素所在单元格, 可以根据单元格获取到当前行.

C1FlexGrid 中有没有对应的办法呢?

Alice 发表于 2017-2-8 10:30:29

本帖最后由 Alice 于 2017-2-8 10:31 编辑

谢谢您的反馈。
不知道您获取是有什么需求。
如果是想设置样式的话,可以通过CellFactory, 重写ApplyCellStyles方法就可以设置样式。

另外有个HitTest方法,可以根据鼠标位置获取到单元格的信息。

zxc9089 发表于 2017-2-8 11:49:24

我是在flexgrid的列中使用了模版, 模版中有一个按钮.按钮有点击事件, 在事件中要获取当前按钮所在行的数据.

使用HitTest, 用button的 RoutedEventArgs 作为参数 获取到的行是 row:-1 column:-1

Alice 发表于 2017-2-8 15:30:45

zxc9089 发表于 2017-2-8 11:49
我是在flexgrid的列中使用了模版, 模版中有一个按钮.按钮有点击事件, 在事件中要获取当前按钮所在行的数 ...

HitTest是根据鼠标位置转换为c1flexgrid位置信息,所以应该在鼠标相关事件里去获取。
所以要看是不是你传入的鼠标有问题,没有转换。
随机安装示例有个HitTest的使用示例,你可以参考下,路径如下:
\Documents\ComponentOne Samples\WPF\C1.WPF.FlexGrid\CS\HitTestTemplate\HitTestTemplate

zxc9089 发表于 2017-2-16 15:32:19

Alice 发表于 2017-2-8 15:30
HitTest是根据鼠标位置转换为c1flexgrid位置信息,所以应该在鼠标相关事件里去获取。
所以要看是不是你 ...

下面是我的设置方式 应该没错呀




Alice 发表于 2017-2-16 17:45:48

zxc9089 发表于 2017-2-16 15:32
下面是我的设置方式 应该没错呀

你做个简单的Demo发过来,我帮你看看。

zxc9089 发表于 2017-2-17 14:28:53

Alice 发表于 2017-2-16 17:45
你做个简单的Demo发过来,我帮你看看。




这是demo

其实主要想实现的功能是点击按钮, 根据业务逻辑填充当前行数据.当行状态为非编辑状态时点击按钮自动就选中了按钮所在行. 所以可以用selectitem来实现.

然而在数据处于编辑状态下,点另一行数据的按钮, 行选中状态没有发生改变.

我使用hittest 来获取按钮所在行, 得到的结果都是0行0列. 如下图


Alice 发表于 2017-2-17 17:06:37

zxc9089 发表于 2017-2-17 14:28
这是demo

其实主要想实现的功能是点击按钮, 根据业务逻辑填充当前行数据.当行状态为非编辑状 ...

谢谢您提供的Demo.
在flexgrid的相关鼠标事件里,直接使用grid.HitTest(e)就能正确得到点击的位置。
如果是使用ButtonClick或是其他的事件,里面的坐标是需要转换的。
请参考:
private void Button_Click(object sender, RoutedEventArgs e)
      {            
            var test = grid.HitTest(Mouse.GetPosition(this));
            MessageBox.Show(string.Format("row:{0}   column:{1}", test.Row, test.Column));
      }

zxc9089 发表于 2017-2-17 20:28:09

问题解决了 谢谢:loveliness:

gw0506 发表于 2017-2-20 19:27:56

本帖关闭。
页: [1]
查看完整版本: C1FlexGrid 中如何根据其中元素找到当前行?