Исключение: Входная строка была в неправильном формате
Я не уверен, как я получаю это.Это происходит только тогда, когда я пытаюсь повторно войти в ячейку, когда значение уже размещено.Поэтому, если пользователь хочет отредактировать то, что он ранее ввел, он создает это исключение.
У меня есть это переопределение, чтобы я мог использовать свойство IsEditable.
Это вызывает исключение после запуска функции GenerateEditingElement.Если я пропущу код для отладки, я получу это.
Ваше приложение перешло в состояние останова, но нет кода для показа, потому что все потоки выполняли внешний код (обычно системный или структурный код).
public class DataGridComboBoxColumn : DataGridBoundColumn {
public Binding ItemsSourceBinding { get; set; }
public string DisplayMemberPath { get; set; }
public string SelectedValuePath { get; set; }
public object ItemSource { get; set; }
public int SelectedIndex { get; set; } = -1;
protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem) {
var textBox = new TextBlock();
if (Binding != null) {
BindingOperations.SetBinding(textBox, TextBlock.TextProperty, Binding);
}
return textBox;
}
protected override FrameworkElement GenerateEditingElement(DataGridCell cell, object dataItem) {
var comboBox = new ComboBox { IsEditable = true };
if (Binding != null && ItemsSourceBinding != null) {
comboBox.DisplayMemberPath = DisplayMemberPath;
comboBox.SelectedValuePath = SelectedValuePath;
BindingOperations.SetBinding(comboBox, ComboBox.SelectedValueProperty, Binding);
BindingOperations.SetBinding(comboBox, ComboBox.ItemsSourceProperty, ItemsSourceBinding);
}
return comboBox;
}
protected override object PrepareCellForEdit(FrameworkElement editingElement, RoutedEventArgs editingEventArgs) {
var comboBox = editingElement as ComboBox;
if (comboBox == null) return null;
if (SelectedIndex != -1 ) { comboBox.SelectedIndex = SelectedIndex; } else { comboBox.SelectedIndex = -1; }
comboBox.Focus(); // This solves the double-tabbing problem that Nick mentioned.
return comboBox.Text;
}
protected override bool CommitCellEdit(FrameworkElement editingElement) {
return base.CommitCellEdit(editingElement);
}
protected override void CancelCellEdit(FrameworkElement editingElement, object uneditedValue) {
base.CancelCellEdit(editingElement, uneditedValue);
}
}
XAML
<local:DataGridComboBoxColumn Header="Prod #" x:Name="cboProd" Width="60" Binding="{Binding ProductNum, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" DisplayMemberPath="ProductNum" SelectedValuePath="ProductsID" ItemsSourceBinding="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:PurMaterialEntry}}, Path=PDN}"/>
PDN - это моя коллекция номеров продуктов проекта в поле со списком рядом с ним.
Что я ищу.
- Я хочу очистить ячейку при повторном входе.
- этим управляет проект ComboBox в сетке.
Изображение, показывающее, что комбинированный список работает во время ввода.
Но если мне нужно изменитьпродукт D101 исключение происходит.