找回密码
 立即注册

QQ登录

只需一步,快速开始

Anyse

注册会员

2

主题

6

帖子

18

积分

注册会员

积分
18

活字格认证

最新发帖
Anyse
注册会员   /  发表于:2015-11-9 11:16  /   查看:7071  /  回复:8
项目有这样一个需求:

Flexgrid绑定数据源,可编辑。其中有一列为Combobox列,独立绑定固定的几个可选值,怎么实现这列能够全键盘操作?

比如:对Combobox列输入数字1,弹出DropDown列表,筛选出与1有关的可选值,键盘上下键选择需要的值,回车确定结束编辑状态。

多谢前辈!

8 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2015-11-9 15:13:00
沙发
回复 1楼Anyse的帖子

非常抱歉回复晚了。
建议您将帖子发布到金牌专区,可以提高帖子回复的速度。
对于FlexGrid的ComboBox列的问题,您可以参考随机安装示例:
\Documents\ComponentOne Samples\WPF\C1.WPF.FlexGrid\CS\ComboBox\ComboBox

对于键盘和下拉框的处理,FlexGrid提供了KeyDown事件,可以处理键盘消息。
而FlexGrid的ComboBox有DropDownOpened事件,当下拉框打开时候触发。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
Anyse
注册会员   /  发表于:2015-11-9 19:13:00
板凳
回复 2楼Alice的帖子

谢谢提示,初来咋到不太懂规矩。
我看过那个Demo,那种方法还不能满足使用需求的。我把一个简单的Demo发上来,有简单的注释。
上下键被FlexGrid的单元格截获,没能作用于弹开的Combobox,就这个问题很烦人。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-11-10 09:14:00
地板
回复 3楼Anyse的帖子

非常感谢您的demo。
您的问题我们收到了,测试后给您反馈。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-11-10 10:36:00
5#
回复 3楼Anyse的帖子

您好。
从您的demo来看,注销掉OnPreviewKeyDown事件,已经实现了您的需求。
  1. //private void FlexGrid_OnPreviewKeyDown(object sender, KeyEventArgs e)
  2.         //{
  3.             ////加上这个事件处理,阻止了FlexGrid的上下键截获,但同时也阻止了Combobox的上下选择
  4.             //if (e.Key == Key.Up || e.Key == Key.Down)
  5.             //    e.Handled = true;
  6.        // }
复制代码

测试步骤:
1.针对性别列,进入编辑状态,使用Up/Down键选择,会弹出下拉框。
2.按下Enter键,会应用选择的值并退出编辑状态。
请问是我有什么理解不对的地方。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
Anyse
注册会员   /  发表于:2015-11-10 14:23:00
6#
回复 5楼Alice的帖子

对的,如果使用“鼠标双击”进入编辑状态,是可以使用up和down方向键来控制选择项。
现在问题在于全键盘操作,不使用鼠标。

我的操作:对该列的某个单元格输入数字1,弹出下拉选择项,此时想要使用up和down来选择,但key事件被FlexGrid截获,并没有被弹出了下拉框的Combobox截获。如此造成了问题。
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-11-10 15:27:00
7#
回复 6楼Anyse的帖子

您好,针对您的问题,按照5楼的代码进行测试,可以使用键盘操作。
测试步骤:
1.在性别列,选择单元格。
2.按下键盘键,比如“1“。
1可以输入,下拉框也可以打开,然后通过up/down选择。
我并没有使用鼠标操作。

如果您是想在flexgrid初始化结束后,就获取焦点,可以使用flexgrid.focus方法。

评分

参与人数 1满意度 +5 收起 理由
Anyse + 5 热心仔细

查看全部评分

请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
Anyse
注册会员   /  发表于:2015-11-10 16:26:00
8#
回复 7楼Alice的帖子

你的操作流程是对的,但没复现问题有点蹊跷,有可能是你们在新版本已经修复了类似问题。
我现在能用的版本被一些原因限定了,是4.0.20141.391。

不纠结,我用同版本的C1DataGrid解决了这个问题。感谢版主的热心回复。
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-11-10 17:10:00
9#
回复 8楼Anyse的帖子

不客气,谢谢您的反馈。
我的测试版本是2015V2。
此问题关闭,如果有新问题请开新帖。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部