Элемент управления Devexpress Grid не устанавливает привязку объекта к экземпляру объекта при нажатии клавиши Tab - PullRequest
0 голосов
/ 30 мая 2018

Исключение выдается после того, как редактор ячейки на месте равен 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

...