高级大宅男 发表于 2016-4-18 16:38:22

C1DataGrid有没有什么事件是,c1:DataGridCheckBoxColumn的CheckBox勾选就触发的?

如题,勾选后并不触发CommittingEdit事件,有没有什么事件是勾选后立刻触发,而不是点别的单元格就触发的?

2.还有个问题一起问了吧,在修改完单元格后,直接点击C1DataGrid外的控件的话,并不能触发CommittingEdit事件,然而这和正常的用户使用习惯不符。。。有没有什么好的解决办法??

Alice 发表于 2016-4-18 17:35:11

本帖最后由 Alice 于 2016-4-18 17:42 编辑

1.DataGridCheckBoxColumn可以通过Style获取到CheckBox.Checked和UnChecked事件。
代码参考如下:<div class="blockcode"><blockquote>
<c1:DataGridCheckBoxColumn.CellStyle>
                        <Style>                           
                            <EventSetter Event="CheckBox.Checked" Handler="OnChecked"/>
                        </Style>


                  </c1:DataGridCheckBoxColumn.CellStyle>   
</blockquote></div><br />

2.这是设计。
你是希望编辑后点击控件外就直接提交修改么?请描述清楚你的具体需求,我们帮你看看怎么实现。

高级大宅男 发表于 2016-4-18 18:01:45

1.EventSetter我知道,但是能不能一点击就触发CommittingEdit事件呢?貌似Form版的可以。能触发CommittingEdit的话我就可以统一在事件中处理各种类别的列。

2.对,按习惯来说不管点不点到DataGrid外都应该触发CommittingEdit事件,提交格子的更改。我希望点离单元格的时候就触发CommittingEdit事件。。实在不行的话有没有别的事件能达到要求?

Alice 发表于 2016-4-19 09:34:54

高级大宅男 发表于 2016-4-18 18:01
1.EventSetter我知道,但是能不能一点击就触发CommittingEdit事件呢?貌似Form版的可以。能触发CommittingE ...

这是事件的设计,CommittingEdit事件是用户结束编辑状态提交时触发,比如在编辑状态按下enter或是tab。

点击CheckBox并没有离开编辑状态并提交,所以不会触发该事件。
点击到控件外其他地方,单元格并没有离开编辑状态,因此也不会触发该事件。

从你的描述来看,如果你需要强制提交,可以调用EndEdit方法结束编辑状态提交。

高级大宅男 发表于 2016-4-19 10:04:51

Alice 发表于 2016-4-19 09:34
这是事件的设计,CommittingEdit事件是用户结束编辑状态提交时触发,比如在编辑状态按下enter或是tab。
...

这个设计有点奇怪吧。。用户也不会编辑DataGrid编辑了一半又跑去别的地方编辑然后又回来吧,而且和Form版以及微软自带的DataGrid行为都不一致啊。。提个建议最起码留个属性什么的,能让用户决定提交的行为方式。

现在我要提交的话,有没有什么合适的事件调用EndEdit?

Alice 发表于 2016-4-19 14:03:51

高级大宅男 发表于 2016-4-19 10:04
这个设计有点奇怪吧。。用户也不会编辑DataGrid编辑了一半又跑去别的地方编辑然后又回来吧,而且和Form版 ...

是的,点击其他地方是不会离开编辑状态。
控件提供了EndEdit方法结束编辑,你可以根据自己的需求在合适的场景调用。

高级大宅男 发表于 2016-4-19 14:27:42

Alice 发表于 2016-4-19 14:03
是的,点击其他地方是不会离开编辑状态。
控件提供了EndEdit方法结束编辑,你可以根据自己的需求在合适 ...

现在不行啊,我刚才尝试在PreviewLostKeyboardFocus事件中处理,但是发现点击单元格进入编辑状态前也会触发DataGrid的PreviewLostKeyboardFocus事件

Alice 发表于 2016-4-19 15:28:39

高级大宅男 发表于 2016-4-19 14:27
现在不行啊,我刚才尝试在PreviewLostKeyboardFocus事件中处理,但是发现点击单元格进入编辑状态前也会触 ...

这个问题已经和产品组进行了确认,目前的设计就是我之前解释的。
这个设计没法修改,可能会对老用户产生影响。

我已经提交产品组帮你看看有没有解决方案。

Alice 发表于 2016-4-19 17:10:30

高级大宅男 发表于 2016-4-19 14:27
现在不行啊,我刚才尝试在PreviewLostKeyboardFocus事件中处理,但是发现点击单元格进入编辑状态前也会触 ...

你可以试试如下的解决方案,使用LostKeyboardFocus事件调用EndEdit方法。
思路就是判断当获得焦点的元素不是DataGrid,也不是DataGrid的子元素上的时候,调用EndEdit方法
void grid_LostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
      {
            var focused = Keyboard.FocusedElement;
            if (focused != null)
            {
                var parent = C1.WPF.VTreeHelper.GetParentOfType((DependencyObject)focused, typeof(C1DataGrid));
                if (parent == null)
                {
                  this.grid.EndEdit();
                }
            }
      }

高级大宅男 发表于 2016-4-28 15:38:25

Alice 发表于 2016-4-19 17:10
你可以试试如下的解决方案,使用LostKeyboardFocus事件调用EndEdit方法。
思路就是判断当获得焦点的元素 ...

结合你给的方法,解决了问题
页: [1] 2
查看完整版本: C1DataGrid有没有什么事件是,c1:DataGridCheckBoxColumn的CheckBox勾选就触发的?