問題タブ [bindingsource]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - BindingSource の更新
私には2つのクラスがあります。つまりCustomerOrder
、Customer
クラスには注文のコレクションへの参照があります。マスターディテールを使用していますBindingSource
。
私の問題は、注文に遅延読み込みパターンを使用すると、詳細BindingSource
が更新されないことです。
UI
だから私のdatagridView1
クリックイベントで
これについて何か助けていただければ幸いです。
.net - BindingSourceコンポーネントが継承されたプロパティを認識できないのはなぜですか?
私はクラスを定義しました:
コントロールをIChildインスタンスにバインドしようとすると、ChildTextプロパティに対してこれを実行できますが、ParentTextプロパティに対しては実行できません。子インスタンスにバインドしようとすると、両方のプロパティがバインド可能になります。データバインディングメカニズムが他のインターフェイスから継承されたプロパティを認識しないのはなぜですか?
編集:SharePoint初心者は正しいです:データバインディングは、コードで手動で定義すると機能します。ただし、BindingSourceコンポーネントを使用してデザイナーでデータバインディングを定義しようとしました。プロジェクトにオブジェクトソースを追加し、それをIChildインターフェイスにポイントすると、バインディングを定義するためにChildTextのみが表示されます。
問題をより適切に反映するために、質問のタイトルを更新しました。
c# - 異なるタブ ページで同じバインディング ソースにバインドされた .Net DataGridViews
タブ コントロールを備えた winform (C# VS2008 .net 3.5) があります。タブ コントロールの 2 つのページには、同じバインディング ソースにバインドされたデータ グリッド ビューがあります。これはうまくいきます。
ただし、タブ ページに保持されているデータ グリッド ビューには、設計時に表示するように設定されているかどうかに関係なく、バインドされたテーブルの最初の列が常に表示されるというバグがあります。
これを回避するには、column.visible プロパティを手動で false に設定します。BindingSource にバインドされた DGV が 1 つだけの場合、これはうまくいきました。ツーバウンドでは、いくつかの奇妙なことが起こります。両方の DGV の最初の列を手動で visible = false に設定しましたが、実際には 1 つだけが取得され、列がもう一方に表示されることがあります。さらに、最初の列を表示している DGV のレコードをクリックすると、次の例外が発生します。
InvalidOperationException - SetCurrentCellAddressCore 関数への再入可能な呼び出しが発生するため、操作は無効です。
他の誰かがこれを経験したことがありますか、またはタブページの column[0] 問題をより適切に修正しましたか?
c# - コントロールの DataSource とは異なる Source への DisplayValue のバインド
タスクと従業員があり、それぞれデータベースにそれぞれのテーブルがあるとします。それらの間には多対多の関係があり、そのため割り当て用の 3 番目のテーブルがあります。
AssignmentsBindingSource にバインドされたリストボックスを作成すると、表示する従業員の名前がありません。これを 2 番目のバインディング ソースから取得し、同じコントロールで使用する方法はありますか?
現在、これを実現するためにビューにバインドしていますが、従業員がタスクに割り当てられると、編集がデータベースにコミットされて再入力されるまで、ビューは情報を更新しません。
c# - BindingSource の最後の EndEdit 呼び出し以降のすべての変更を元に戻す
シナリオは次のとおりです (DataSet 内の DataTable にバインドされた BindingSource を使用します)。
- ユーザーが新しいアドレス帳の連絡先を作成し、データ バインドされたコントロールに名と姓を入力します。
- そのイベント ハンドラーが BindingSource.EndEdit() を呼び出します。
- その後、彼は間違いに気づき、メール アドレスを追加しました。
- しかし、彼が [適用] を押すと、検証が失敗する (無効な電子メール形式) ため、EndEdit() は呼び出されません。
- 彼は編集を行わないことに決め、イベント ハンドラが BindingSource.CancelEdit() を呼び出す [キャンセル] ボタンを押します。
- しかし、BindingSource は姓と名だけで電子メールを持たない新しい連絡先に戻すのではなく、レコード全体を削除しました。
最後に EndEdit() が呼び出されてからのアクションのみを元に戻す方法はありますか? CancelEdit() がどのように機能するはずだったのかという印象を受けました。
c# - DataTable とバインディング ソース
次の2つの例の違いを理解しようとしています。
まず、これは現在、WinForm アプリのコントロールにデータを割り当てる方法です。
これは機能しているように見えますが、少しずれている場合は、コードを見るだけではおそらく経験が不足していることを認めます。また、実際には:\Person.CountyList()
を返します。DataTable
今、私が見つけたすべての例は、私がこれを行うべきだと言っているようです.
BindingSource を使用する利点はありますか? 他の方法でそれを行うことにマイナスはありますか?
コンテキストとして、これは SQL 2005 を使用した C# の WinForm CRUD アプリです。
c# - 2 つの BindingSource の同期
DataGridView
ダブルクリックで詳細フォームを開くフォームがあります。
2 番目のフォームを開くときにDataSet
、親フォームと同じインスタンスを使用するように設定しました。DataRow
私は今、2 番目のフォームが親と同じものを指していることを確認したいと考えています。最初に、親フォームの のプロパティを
送信し、詳細フォームの に同じプロパティを設定しました。これは、並べ替えを開始するまでは問題なく機能していました。現在、親の位置は並べ替えられた値を示しており、すべての地獄が解き放たれています。次に、実際のオブジェクトと親のオブジェクトを
送信して、詳細にメソッドを使用しようとしましたが、すべて-1が返されます。Position
BindingSource
BindingSource
DataGridView
DataRow
DataRowView
BindingSource
Find
BindingSource
BindingSource
Current
インデックスまたは値を中継できない場合、プロパティ
を設定するために使用できる他の方法はありますか? メソッドを使用しFilter
てフィルター クエリを動的に構築する必要がありますか (PK には複数のプロパティがあるため、単に使用することはできませんFind
)。
c# - .NET BindingSource フィルター構文リファレンス
BindingSource の Filter プロパティを使用して、SQL のようなフィルタリングを行うことができます。例えば:
これの正確な構文に関するドキュメントのようなものはありますか?
フィールドが DBNull でないかどうかを確認したいので、"Field != NULL" を試しましたが、構文エラーが発生します。
c# - 1 つのデータ ソースに複数の BindingSource コンポーネントが必要ですか?
前の質問のとおり、.NET のある種のインターフェイスを介したデータ バインディングでプロパティを使用できるようにしますか? 、 @Marc Gravellの助けを借りて、インターフェースICustomTypeDescriptorを実装することで、問題のコンポーネントに実際の通常のプロパティとして表示される場合と表示されない場合があるカスタム プロパティをフォーム デザイナーに提供できるようになりました。
私はこれを管理しましたが、私の実装には欠陥があります。私が現在抱えている最大の問題は、そのようなカスタム プロパティが 2 つあるフォームにコンポーネントをドロップし、フォームに 2 つのテキスト ボックスをドロップしてデータ バインディングを使用すると、プロパティ インスペクターのデータ バインディング ドロップダウンにオブジェクト データが必要になることです。ソースですが、コントロールにバインドする各プロパティは、別のBindingSourceコンポーネントをフォームに追加します。
言い換えてみましょう。カスタム コンポーネントをフォームにドロップします。これには 2 つのプロパティがあり、ICustomTypeDescriptorの実装を通じて使用できますが、通常のプロパティとしては表示されません。
次に、2 つのテキストボックスをフォームにドロップします。それらの 1 つのプロパティ インスペクターに移動して、Text プロパティのデータ バインディングを追加します。プロジェクトにオブジェクト データ ソースが必要なので、それを追加します。次に、テキスト ボックスの Text プロパティをカスタム コンポーネントの最初のプロパティにバインドした後、フォーム デザイナーは別のコンポーネント「customDataBindingBindingSource」を追加し、2 つの間のデータ バインディングを橋渡しします。ここまでは順調ですね。
次に、同じ方法で他のテキスト ボックスのデータ バインディングを設定すると (カスタム コンポーネントの他のプロパティを選択できるようになったことを除いて)、別のブリッジ "customDataBindingBindingSource1" が追加されます。バインドするプロパティを切り替え続けると、そのたびにそのようなブリッジが 1 つ追加されます。
これは本当に必要ですか?
そうでない場合、 ICustomTypeDescriptor実装で何が間違っていましたか? 確かに、それは素朴で単純で、完全には程遠いですが、何を修正する必要があるのか わかりません。ポインタはありますか?
これが私のカスタムクラスです:
また、次のように、これらのブリッジをフォーム コンストラクターで最初にドロップしたコンポーネントに手動で接続する必要があります。
これを回避する方法はありますか?
基本的に、コンポーネントを使用するときにやりたいことは次のとおりです。
- カスタム コンポーネントの 1 つをフォームにドロップする
- 必要なコントロール (テキスト ボックス、日付ピッカーなど) をドロップします。
- コントロールのデータ バインディングをカスタム コンポーネントの関連するプロパティに割り当てる
可能であれば、プロジェクト データ ソース、ブリッジ コンポーネント、およびコンストラクター内のコードは避けたいと思います。避けたいことすべて。
誰かにコードを教えてほしいと頼んでいるわけではないことに注意してください。どんなポインタでも大歓迎です。