C1DataGrid有没有什么事件是,c1:DataGridCheckBoxColumn的CheckBox勾选就触发的?
如题,勾选后并不触发CommittingEdit事件,有没有什么事件是勾选后立刻触发,而不是点别的单元格就触发的?2.还有个问题一起问了吧,在修改完单元格后,直接点击C1DataGrid外的控件的话,并不能触发CommittingEdit事件,然而这和正常的用户使用习惯不符。。。有没有什么好的解决办法??
本帖最后由 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.这是设计。
你是希望编辑后点击控件外就直接提交修改么?请描述清楚你的具体需求,我们帮你看看怎么实现。 1.EventSetter我知道,但是能不能一点击就触发CommittingEdit事件呢?貌似Form版的可以。能触发CommittingEdit的话我就可以统一在事件中处理各种类别的列。
2.对,按习惯来说不管点不点到DataGrid外都应该触发CommittingEdit事件,提交格子的更改。我希望点离单元格的时候就触发CommittingEdit事件。。实在不行的话有没有别的事件能达到要求? 高级大宅男 发表于 2016-4-18 18:01
1.EventSetter我知道,但是能不能一点击就触发CommittingEdit事件呢?貌似Form版的可以。能触发CommittingE ...
这是事件的设计,CommittingEdit事件是用户结束编辑状态提交时触发,比如在编辑状态按下enter或是tab。
点击CheckBox并没有离开编辑状态并提交,所以不会触发该事件。
点击到控件外其他地方,单元格并没有离开编辑状态,因此也不会触发该事件。
从你的描述来看,如果你需要强制提交,可以调用EndEdit方法结束编辑状态提交。
Alice 发表于 2016-4-19 09:34
这是事件的设计,CommittingEdit事件是用户结束编辑状态提交时触发,比如在编辑状态按下enter或是tab。
...
这个设计有点奇怪吧。。用户也不会编辑DataGrid编辑了一半又跑去别的地方编辑然后又回来吧,而且和Form版以及微软自带的DataGrid行为都不一致啊。。提个建议最起码留个属性什么的,能让用户决定提交的行为方式。
现在我要提交的话,有没有什么合适的事件调用EndEdit? 高级大宅男 发表于 2016-4-19 10:04
这个设计有点奇怪吧。。用户也不会编辑DataGrid编辑了一半又跑去别的地方编辑然后又回来吧,而且和Form版 ...
是的,点击其他地方是不会离开编辑状态。
控件提供了EndEdit方法结束编辑,你可以根据自己的需求在合适的场景调用。
Alice 发表于 2016-4-19 14:03
是的,点击其他地方是不会离开编辑状态。
控件提供了EndEdit方法结束编辑,你可以根据自己的需求在合适 ...
现在不行啊,我刚才尝试在PreviewLostKeyboardFocus事件中处理,但是发现点击单元格进入编辑状态前也会触发DataGrid的PreviewLostKeyboardFocus事件 高级大宅男 发表于 2016-4-19 14:27
现在不行啊,我刚才尝试在PreviewLostKeyboardFocus事件中处理,但是发现点击单元格进入编辑状态前也会触 ...
这个问题已经和产品组进行了确认,目前的设计就是我之前解释的。
这个设计没法修改,可能会对老用户产生影响。
我已经提交产品组帮你看看有没有解决方案。 高级大宅男 发表于 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();
}
}
} Alice 发表于 2016-4-19 17:10
你可以试试如下的解决方案,使用LostKeyboardFocus事件调用EndEdit方法。
思路就是判断当获得焦点的元素 ...
结合你给的方法,解决了问题
页:
[1]
2