在WPF的DATAGRID中快速点击出现在ADDNEW或EDITITEM事务过程不允许DEFERREFRESH
生活随笔
收集整理的這篇文章主要介紹了
在WPF的DATAGRID中快速点击出现在ADDNEW或EDITITEM事务过程不允许DEFERREFRESH
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在WPF的DATAGRID中快速點擊出現(xiàn)在ADDNEW或EDITITEM事務(wù)過程不允許DEFERREFRESH
/// 鼠標按下事件,處理快速點擊發(fā)生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));
}
原文?在WPF的DATAGRID中快速點擊出現(xiàn)在ADDNEW或EDITITEM事務(wù)過程不允許DEFERREFRESH
在項目中關(guān)于DataGrid的遇到過一些問題,其中是關(guān)于遷入CheckBox的雙向綁定后,快速點擊多次后出現(xiàn)“AddNew或EditItem事務(wù)過程不允許DeferRefresh”的問題,如圖所示
或者是英文
原因是DataGrid編輯狀態(tài)引起的,詳情見http://stackoverflow.com/questions/3354916/what-is-the-proper-way-to-handle-multiple-datagrids-in-a-tab-control-so-that-cel,
解決方法正如上面所說的,在datagrid中添加一個PreviewMouseDown鼠標按下前事件,如下
/// <summary>/// 鼠標按下事件,處理快速點擊發(fā)生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的名稱,大家可以了解一下。
posted on 2014-01-08 14:14 NET未來之路 閱讀(...) 評論(...) 編輯 收藏轉(zhuǎn)載于:https://www.cnblogs.com/lonelyxmas/p/3510578.html
總結(jié)
以上是生活随笔為你收集整理的在WPF的DATAGRID中快速点击出现在ADDNEW或EDITITEM事务过程不允许DEFERREFRESH的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《海底两万里》第十章+在潜艇里吃什么?
- 下一篇: 空军有那些士官学校,都有些什么专业?