簡體   English   中英

永遠不會調用C#BindingSource.AddingNew嗎?

[英]C# BindingSource.AddingNew is never called?

當我離開數據網格的單元格時,永遠不會調用BindingSource.AddingNew。

DataGrid具有綁定源作為數據源,該綁定源又具有“客戶”的“列表”。

BindingSource需要什么來創建一個新的Customer對象並將其添加到基礎ICustomerList?

當然,接口沒有構造函數...

但是我的客戶對象具有默認的構造函數!

那就是我得到的異常:

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

bei System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr,活頁夾活頁夾,Object [] args,CultureInfo文化,Object [] ActivationAttributes)bei System.SecurityUtils.SecureCreateInstance(Type type,Object [] 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。 DevExpress.Data.CurrencyDataController.AddNewRow()經濟類.DevExpress.XtraEditors.TextEdit.OnMaskBox_ValueChanged(Object sender,EventArgs e).DevExpress.XtraEditors.Mask.MaskBox.RaiseEditTextChanged().System.BaseEdit.OnEditValueChanging(ChangingEventArgs e) Windows.Forms.TextBoxBase.WmReflectCommand(Message&m)北DevExpress.XtraEditors.Mask.MaskBox.BaseWndProc(Message&m)北DevExpress.XtraEditors.Mask.MaskBox.WndProc(Message&m)北DevExpress.XtraEditors.TextBoxMaskBox.WndProc(Message&msg )bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&m)bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd,Int32 msg,IntPtr wparam,IntPtr lparam)

如果要使用AddNew,則用於數據綁定的對象需要具有無參數的構造函數。 顯然接口沒有構造函數,所以這很痛苦。 您也不能為此使用抽象類,因為它不能被實例化。 唯一的方法是將具體類型用作層次結構的根。

作為參考,您可以查看IBindingList

此外,我會放棄它,因為DataGridView的ICancelAddNew存在錯誤,如果用戶在新行處於活動狀態時直接按Esc鍵,或者只是離開它,那么恐怖就開始了。 根據我的經驗,一個更好的解決方案是有一個“添加新..”按鈕和另一個帶有文本框/組合框(依此類推)的窗口。 如果您使用的是標准控件之外的其他DataGrid控件,那當然不是問題。

這些問題已在WPF及其DataGrid組件中完全解決。 如果這是一個新項目,並且您可以切換到WPF,則強烈建議您這樣做。 這意味着減少了很多痛苦。

我不確定我是否理解您的問題; 離開牢房時,為什么綁定源會添加新項目?

如果添加新項目,則可以在eventargs中將屬性設置為AddingNew,以“覆蓋”(僅在此特定上下文中而不是通常情況下使用的單詞)被覆蓋的新對象,您可以在其中使用任意構造函數。 只需設置e.NewObject = new YourObject。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM