0

データグリッドのセルを離れるときに BindingSource.AddingNew が呼び出されることはありません。

DataGrid はデータソースとして、再び「Customer」の「List」を持つ BindingSource を持っています。

BindingSource が新しい Customer オブジェクトを作成し、基になる ICustomerList に追加するには何が必要ですか?

もちろん、インターフェースにはコンストラクターがありません...

しかし、私の顧客オブジェクトにはデフォルトのコンストラクターがあります!

それは私が得る例外です:

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

System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr、バインダー バインダー、Object[] args、CultureInfo culture、Object[] activationAttributes) System.SecurityUtils.SecureCreateInstance(Type type、Object[] args) System.ComponentModel.BindingList1.AddNewCore() bei System.ComponentModel.BindingList1.System.ComponentModel.IBindingList.AddNew() は System.Windows.Forms.BindingSource.AddNew() であり、System.Windows.Forms.CurrencyManager.AddNew() であり、DevExpress.Data.CurrencyDataController.OnCurrencyManagerAddNew() であり、DevExpress.Data です。 CurrencyDataController.AddNewRow() DevExpress.XtraGrid.Views.Grid.GridView.OnActiveEditor_ValueModified(Object sender, EventArgs e) DevExpress.XtraEditors.Repository.RepositoryItem.RaiseModified(EventArgs e) DevExpress.XtraEditors.BaseEdit.OnEditValueChanging(ChangingEventArgs e) . BaseWndProc(メッセージ&m) DevExpress.XtraEditors.Mask.MaskBox.WndProc(Message& m) DevExpress.XtraEditors.TextBoxMaskBox.WndProc(Message& msg) System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) System.Windows.Forms .NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

4

2 に答える 2

0

AddNew を使用する場合、データバインディング用のオブジェクトにはパラメーターなしのコンストラクターが必要です。明らかにインターフェイスにはコンストラクターがないため、これは非常に面倒です。インスタンス化できないため、この目的で抽象クラスを使用することもできません。唯一の方法は、具象型を階層のルートとして使用することです。

参考までに、IBindingListを参照してください。

また、DataGridView には ICancelAddNew のバグがあり、新しい行がアクティブなときにユーザーが Esc キーを押すか、そのままにしておくと、恐怖が始まるため、あきらめます。私の経験から、より良い解決策は、「新規追加..」ボタンと、テキストボックス/コンボボックス(など)を備えた別のウィンドウを用意することです。もちろん、標準以外の DataGrid コントロールを使用している場合は問題ありません。

これらの問題は、WPF とその DataGrid コンポーネントで完全に解決されています。それが新しいプロジェクトであり、WPF に切り替えることができる場合は、強くお勧めします。それは、痛みがずっと少ないことを意味します。

于 2010-06-08T12:05:04.390 に答える
0

あなたの質問を理解できたかどうかわかりません。セルを離れるときにバインディングソースが新しいアイテムを追加するのはなぜですか?

新しいアイテムを追加する場合、eventargs のプロパティを AddingNew に設定して、任意のコンストラクターを使用できる追加される新しいオブジェクトを「オーバーライド」します (通常の意味ではなく、この特定のコンテキストでのみ単語を使用します)。 . e.NewObject = new YourObject と設定するだけです。

于 2010-07-17T14:34:05.487 に答える