Исключение выдается после того, как редактор ячейки на месте равен validated
, так как строки и ячейки теряют фокус (это основная проблема, которую я хочу решить):
Как добраться до ошибки
Я даю в качестве ввода значение RepositoryItemTextEdit
, например Id
, затем проверяю, существует ли оно в базе данных, и возвращаю полный объект, содержащий этот идентификатор,поэтому я ловлю sender
как TextEdit
и помещаю returned object
в его свойство EditValue
.Далее происходит то, что и ячейки, и строки по какой-то причине получают не сфокусировано , поэтому, если я нажимаю клавишу TAB , выдается вышеупомянутое исключение (я думаю, что оно не находит ничего для фокусировкитак что это главная проблема), иначе, если я вручную выберу ячейку и затем нажму TAB , исключение не будет выдано.
private void OnRepositoryPartitariValidating(object sender, CancelEventArgs e)
{
var objConto = gridView.GetFocusedRowCellValue("Conto");
if (((sender as TextEdit).EditValue) is Partitario) return;
var codice = (sender as TextEdit).EditValue.ToString();
var partitario = Partitario.Manager.GetByCodice(codice);
if (partitario == null)
{
e.Cancel = true;
if (objConto is Conto)
using (ListPartitari form = new ListPartitari((Conto)objConto))
{
form.FnOk += delegate (object item)
{
if (item is Partitario)
{
(sender as TextEdit).EditValue = item;
e.Cancel = false;
}
};
form.ShowDialog(this);
}
else
using (ListPartitari form = new ListPartitari())
{
form.FnOk += delegate (object item)
{
if (item is Partitario)
{
(sender as TextEdit).EditValue = item;
e.Cancel = false;
}
};
form.ShowDialog(this);
}
}
else
{
(sender as TextEdit).EditValue = partitario;
//if (partitario.Conto.Id != ((Conto)objConto).Id)
// gridView.SetFocusedRowCellValue("Conto", partitario.Conto);
}
}
Этостек трассировки ошибки: https://pastebin.com/yNx7MLhe
Сведения об исключении: https://imgur.com/a/Qq0THOL