Исключение в редактировании ячеек WPF datagrid
Привет,
Я с помощью WPF DataGrid и у меня привязка к ItemsSource в качестве объекта DataTable.
Я часто редактирую детали ячейки и копирую значение ячейки из одной в другую. Во время этого процесса я получаю следующую ошибку при редактировании события ячейки в WPF DataGrid.
Приведенный ниже код я использовал для редактирования значения ячейки
Код Редактирования Ячейки :
<pre>private void AutoBook_Datagrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e) { try { if (e.EditAction == DataGridEditAction.Commit) { int primaryKey = 0; DataRowView editedRow = (DataRowView)mainWindow.autoBook_Datagrid.SelectedItems[0]; if (editedRow != null && !string.IsNullOrEmpty(editedRow.Row["ID"].ToString())) { primaryKey = Convert.ToInt32(editedRow.Row["ID"]); } if (e.EditingElement.ToString().Contains("TextBox")) { if (e.EditingElement != null) { UpdateTextBoxValue(e.EditingElement as TextBox, e.Column.Header.ToString(), primaryKey); } } else if (e.EditingElement.ToString().Contains("CheckBox")) { if (e.EditingElement != null) { UpdateCheckBoxValue(e.EditingElement as CheckBox, e.Column.Header.ToString(), primaryKey); } } } } catch (Exception ex) { throw ex; } }
Привязка XAML :
<pre><DataGrid x:Name="autoBook_Datagrid" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" ScrollViewer.CanContentScroll="True" BorderBrush="{StaticResource GreenBrush}" HorizontalAlignment="Left" VerticalAlignment="Top" RowHeight="25" GridLinesVisibility="All" ClipboardCopyMode="IncludeHeader" ItemsSource="{Binding DynamicBindingTable, UpdateSourceTrigger=PropertyChanged}" CanUserAddRows="{Binding CanAddNewRows, UpdateSourceTrigger=PropertyChanged}" VirtualizingPanel.VirtualizationMode="Recycling" VirtualizingPanel.ScrollUnit="Pixel" EnableColumnVirtualization="True" EnableRowVirtualization="True" FocusVisualStyle="{StaticResource ButtonFocusVisual}" CanUserDeleteRows="False" >
сообщение об ошибке :
Необработанное Исключение: Система.ArgumentNullException: значение не может быть null.
Имя параметра: элемент
в системе.Окна.Автоматизация.Сверстники.UIElementAutomationPeer.FromElement(элемент UIElement)
в системе.Окна.Управления.компонента DataGrid.CellAutomationValueHolder.TrackValue()
в системе.Окна.Управления.Элемент управления DataGrid.ReleaseCellAutomationValueHolders()
в системе.Окна.Управления.компонента DataGrid.OnExecutedCommitEdit(ExecutedRoutedEventArgs e)
в системе.Окна.Управления.компонента DataGrid.OnExecutedCommitEdit(отправитель объекта, ExecutedRoutedEventArgs e)
Не могли бы вы помочь мне решить этот вопрос?
С уважением,
Arunkumar Murugesan
Что я уже пробовал:
Я не мог найти решение. Не могли бы вы помочь мне выйти из этого вопроса?
Richard Deeming
catch (Exception ex) { throw ex; }
Не делай этого. Вы только что отбросили трассировку стека исключения, что значительно затрудняет поиск истинного источника любых ошибок.
Если вам действительно нужно повторно создать исключение, просто используйте
throw;
вместо throw ex;
:catch (Exception) { throw; }
Но в этом случае, поскольку вы ничего не делаете с исключением, просто не ловите его. Снимите крышку
try..catch
блокируйте, и пусть исключения распространяются нормально.
Richard Deeming
Ошибка выглядит как ошибка WPF. Кто-то из StackOverflow получал ту же ошибку еще в 2018 году, но там нет реального решения:
c# - вход в режим прерывания на событии DataGrid CellEditEnding - переполнение стека[^]