Anyse 发表于 2015-11-9 11:16:00

FlexGrid的ComboBox列

项目有这样一个需求:

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

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

多谢前辈!

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事件,当下拉框打开时候触发。

Anyse 发表于 2015-11-9 19:13:00

回复 2楼Alice的帖子

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


Alice 发表于 2015-11-10 09:14:00

回复 3楼Anyse的帖子

非常感谢您的demo。
您的问题我们收到了,测试后给您反馈。

Alice 发表于 2015-11-10 10:36:00

回复 3楼Anyse的帖子

您好。
从您的demo来看,注销掉OnPreviewKeyDown事件,已经实现了您的需求。
//private void FlexGrid_OnPreviewKeyDown(object sender, KeyEventArgs e)
      //{
            ////加上这个事件处理,阻止了FlexGrid的上下键截获,但同时也阻止了Combobox的上下选择
            //if (e.Key == Key.Up || e.Key == Key.Down)
            //    e.Handled = true;
       // }
测试步骤:
1.针对性别列,进入编辑状态,使用Up/Down键选择,会弹出下拉框。
2.按下Enter键,会应用选择的值并退出编辑状态。
请问是我有什么理解不对的地方。

Anyse 发表于 2015-11-10 14:23:00

回复 5楼Alice的帖子

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

我的操作:对该列的某个单元格输入数字1,弹出下拉选择项,此时想要使用up和down来选择,但key事件被FlexGrid截获,并没有被弹出了下拉框的Combobox截获。如此造成了问题。

Alice 发表于 2015-11-10 15:27:00

回复 6楼Anyse的帖子

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

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

Anyse 发表于 2015-11-10 16:26:00

回复 7楼Alice的帖子

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

不纠结,我用同版本的C1DataGrid解决了这个问题。感谢版主的热心回复。

Alice 发表于 2015-11-10 17:10:00

回复 8楼Anyse的帖子

不客气,谢谢您的反馈。
我的测试版本是2015V2。
此问题关闭,如果有新问题请开新帖。
页: [1]
查看完整版本: FlexGrid的ComboBox列