C # BindingSource.AddingNew никогда не вызывается? - PullRequest
0 голосов
/ 08 июня 2010

BindingSource.AddingNew никогда не вызывается, когда я покидаю ячейку моей таблицы данных.

DataGrid имеет в качестве источника данных BindingSource, который снова имеет «Список» «Клиент».

Что нужно BindingSource для создания нового объекта Customer и добавления его в базовый ICustomerList?

Конечно, интерфейс не имеет конструктора ...

но у моего объекта customer есть конструктор по умолчанию!

Вот исключение, которое я получаю:

System.MissingMethodException: The constcructor for the type "SAT.EnCoDe.Administration.ICustomer" was not found.

bei System.RuntimeType.CreateInstanceImpl (BindingFlags bindingAttr, Binder Binder, Object [] args, CultureInfo culture, Object [] активацииAttributes) bei System.SecurityUtils.SecureCreateInstance (Тип типа, Объект [] args) bei System.ComponentModel.BindingList 1.AddNewCore() bei System.ComponentModel.BindingList 1.System.ComponentModel.IBindingList.AddNew () bei System.Windows.Forms.BindingSource.AddNew () bei System.Windows.Forms.CurrencyManager.AddNew () bei DevExpress.Data.CurrencyDataController.OnCurrencyManagerAddNew () bei DevExpress.Data.CurrencyDataController.AddNewRow () bei DevExpress.XtraGrid.Views.Grid.GridView.OnActiveEditor_ValueModified (Отправитель объекта, EventArgs e) bei DevExpress.XtraEditors.Repository.RepositoryItem.RaiseModified (EventArgs e) bei DevExpress.XtraEditors.BaseEdit.OnEditValueChanging (ChangingEventArgs e) bei DevExpress.XtraEditors.TextEdit.OnMaskBox_ValueChanged (Отправитель объекта, EventArgs e) bei DevExpress.XtraEditors.Mask.MaskBox.RaiseEditTextChanged () bei System.Windows.Forms.TextBoxBase.WmReflectCommand (Message & m) bei DevExpress.XtraEditors.Mask.MaskBox.BaseWndProc (Message & m) bei DevExpress.XtraEditors.Mask.MaskBox.WndProc (Message & m) bei DevExpress.XtraEditors.TextBoxMaskBox.WndProc (Сообщение и сообщение) bei System.Windows.Forms.Control.ControlNativeWindow.WndProc (Message & m) bei System.Windows.Forms.NativeWindow.Callback (IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Ответы [ 2 ]

0 голосов
/ 17 июля 2010

Я не уверен, что понял ваш вопрос; почему ваш bindingsource добавляет новый элемент, когда вы покидаете ячейку?

ЕСЛИ вы добавляете новый элемент, вы можете установить свойство в Eventargs на AddingNew, которое «переопределяет» (используя слово только в этом конкретном контексте, а не в обычном смысле) добавляемый новый объект, в котором вы можете использовать Конструктор, пожалуйста. Просто установите e.NewObject = new YourObject.

0 голосов
/ 08 июня 2010

Объект, предназначенный для привязки данных, должен иметь конструктор без параметров, если необходимо использовать AddNew.Очевидно, что интерфейсы не имеют конструкторов, так что это довольно сложно.Вы также не можете использовать абстрактный класс для этой цели, потому что он не может быть создан.Единственный способ - использовать конкретный тип в качестве корня вашей иерархии.

Для справки вы можете посмотреть IBindingList

Кроме того, я бы отказался от этого, потому что DataGridView имеет ошибки с ICancelAddNew и если пользователь нажимает Esc, когда новая строка активна или простооставляет его, тогда начинается ужасПо моему опыту, лучшим решением было бы иметь кнопку «Добавить новый ..» и другие окна с текстовыми полями / списками (и так далее).Это, конечно, не проблема, если вы используете какой-то другой элемент управления DataGrid, кроме стандартного.

Эти проблемы полностью решены в WPF и его компоненте DataGrid.Если это новый проект, и вы можете перейти на WPF, я настоятельно рекомендую это сделать.Это значит намного меньше боли.

...