OK、データセットを表すバインディングソースがあります。そのbindingsourceはリストボックスにバインドされています。これは、指定された列のすべての名前が入力されるという点で、意図したとおりに機能します。問題ない。
別のbindingsource1にバインドされた2番目のリストボックスがあります。これ自体はbindingsource1にバインドされていますが、データセット内の別のテーブルへの関係の1つを表すデータメンバーを使用しています。その結果、最初のリストの項目をクリックすると、2番目のリストに関連するすべてのものが表示されます。
ここでは新しいものはなく、実際に複雑なものもありません。これはかなり標準的なものであり、意図したとおりに機能します。
ただし、最初のリストボックスにドラッグアンドドロップ機能を実装しようとしています。mousedownのイベントハンドラーを追加しました。この中で、私は呼んでいます
DoDragDrop(current, DragDropEffects.Copy | DragDropEffects.Move);
ここで、currentはからの現在のオブジェクトに設定されますbindingsource1.Current.Row["Name"]
。
さて、これはそれが奇妙になるところです。リストボックス自体が正しく更新されていても(新しく選択されたアイテムが強調表示され、インデックスとアイテムがすべて期待どおりに返され、新しく選択されたアイテム/インデックス)、bindingsource1.Currentは更新されていません。実際、2番目のリストボックスはまだ更新されていません。以前に選択したアイテムに関連するデータを表示します。
矢印キーを使用して上下に移動すると、リストボックスのハイライトが期待どおりに変更され、リストボックス2のデータも期待どおりに更新されます。
DoDragDrop行をコメントアウトすると、すべてが意図したとおりに機能するようです。
このことから、DoDragDropが特定のイベントの発生を何らかの形で妨げていると推測することしかできませんが、なぜ/これが望ましい動作であるか/それを汚す方法/適切に回避する方法がわかりません...
オビ=ワン・ケノービを助けてください、あなたは私の唯一の希望です...
編集:問題の簡略化された実装を作成しました:dropbox.com/s/qxfsvr28ftojdax/BindingDragDrop.zip dodragdropと上部のラベルをコメントアウトし、dodragdropを入れても、登録されません... – </ p>