zoukankan      html  css  js  c++  java
  • 在WPF的DataGrid中快速点击出现在AddNew或EditItem事务过程不允许DeferRefresh

        在项目中关于DataGrid的遇到过一些问题,其中是关于迁入CheckBox的双向绑定后,快速点击多次后出现“AddNew或EditItem事务过程不允许DeferRefresh”的问题,如图所示

    或者是英文

    原因是DataGrid编辑状态引起的,详情见http://stackoverflow.com/questions/3354916/what-is-the-proper-way-to-handle-multiple-datagrids-in-a-tab-control-so-that-cel

    解决方法正如上面所说的,在datagrid中添加一个PreviewMouseDown鼠标按下前事件,如下

            /// <summary>
    /// 鼠标按下事件,处理快速点击发生deferRefresh异常的处理
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void dtgSchemeApp_PreviewMouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
    if (IsUnderTabHeader(e.OriginalSource as DependencyObject))
    CommitTables(this.dtgSchemeApp);
    }

    private bool IsUnderTabHeader(DependencyObject control)
    {
    if (control is TabItem)
    return true;
    DependencyObject parent = VisualTreeHelper.GetParent(control);
    if (parent == null)
    return false;
    return IsUnderTabHeader(parent);
    }

    private void CommitTables(DependencyObject control)
    {
    if (control is DataGrid)
    {
    DataGrid grid = control as DataGrid;
    grid.CommitEdit(DataGridEditingUnit.Row, true);
    return;
    }
    int childrenCount = VisualTreeHelper.GetChildrenCount(control);
    for (int childIndex = 0; childIndex < childrenCount; childIndex++)
    CommitTables(VisualTreeHelper.GetChild(control, childIndex));
    }
    
    

    其中this.dtgSchemeApp是DataGrid的名称,大家可以了解一下。

  • 相关阅读:
    网站发布小工具,--让发布变简单一点
    鼠标右键发布文件到远程服务器
    关于跑步耳机的一些思考
    对棋牌游戏平台的一些思考
    复杂业务简单化的一个小技巧
    游戏杂记
    python 杂记
    lua debug
    quick-cocos2d-x 杂记
    Linux 杂记
  • 原文地址:https://www.cnblogs.com/huangyuanfengxue/p/huangyuanfengxue.html
Copyright © 2011-2022 走看看