問題タブ [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 から項目タイプを取得できますか?
BindingSource が接続または構成されている項目の Type を取得したいと思います。BindingSource.DataSource プロパティは、オブジェクト、リスト、または型に設定できます。それが Type の場合、バインドされたアイテムがまだないことは明らかですが、それでも Type を取得したいと考えています。リストの場合、リスト タイプではなくアイテム タイプが必要です。
私は現在、IListItemType インターフェイスを実装するビジネス オブジェクトのカスタム リスト タイプを持っています。これは、しばらく前にこの問題を解決するために作成したものです。これをより一般的な方法で機能させて、どのリストでも機能するようにしたいと思います。
これを行う良い方法についてAPIドキュメントを調べましたが、これまでのところ運がありません。私は何かを見逃していますか、それともこれは私ができない、またはすべきでないことですか?
.net - BindingSource を使用する価値があるのはいつですか?
BindingSource クラスが何をするのか、つまり、データ ソースと UI コントロールの間に間接レイヤーを提供するということを十分に理解していると思います。IBindingList インターフェイスを実装しているため、並べ替えもサポートされます。そして、あまり問題なく、十分に頻繁に使用しました。しかし、必要以上に頻繁に使用するかどうかは疑問です。おそらく、例が役立つでしょう。
フォームに単純なテキスト ボックス (WinForms を使用) があり、そのテキスト ボックスを、文字列を返すクラス内の単純なプロパティにバインドしたいとします。この状況で BindingSource を使用する価値はありますか?
ここで、フォームにグリッドがあり、それを DataTable にバインドしたいとします。今すぐ BindingSource を使用する必要がありますか?
後者の場合、収集できるものから DataTable として BindingSource を使用しない可能性が高く、BindingSource 自体が提供するのと同じ機能を提供します。グリッドが自動的に更新されるように、行が追加、削除などされると、DataTable は適切なイベントを発生させます。
しかし、テキスト ボックスが文字列にバインドされている最初のケースでは、おそらく文字列プロパティを含むクラスに INotifyPropertyChanged を実装させ、文字列が変更されたときに PropertyChanged イベントを発生させることができます。これらの PropertyChanged イベントをリッスンできるように BindingSource を使用して、文字列が変更されたときにテキスト ボックスを自動的に更新できるようにします。
これまでのところ、これはどのように聞こえますか?全体像を見るのを妨げている私の理解にはまだギャップがあるように感じます. これまでのところ、これはかなり漠然とした質問だったので、より具体的な質問をいくつかしてみます - 理想的には、回答は上記の例または類似のものを参照します...
(1) 上記の例のいずれかで BindingSource を使用する価値はありますか?
(2) 開発者は、適切なタイミングで PropertyChanged イベントを発生させるという点で、DataTable クラスが適切なことを行うと「想定」しているようです。データソースがこれを行うことができるかどうかをどのように知ることができますか? 開発者がこの動作を想定できるようにするために、データ ソースが実装する必要がある特定のインターフェイスはありますか?
(3) BindingSource を使用するかどうかを検討するとき、どの Control にバインドされているかは重要ですか? それとも、決定に影響を与えるのはデータ ソースだけですか? おそらく答えは (そしてこれは十分に論理的に思えるでしょう): Control は PropertyChanged イベントをリッスンするのに十分なほどインテリジェントである必要があります。それ以外の場合は BindingSource が必要です。では、コントロールがこれを行うことができるかどうかをどのように判断しますか? 繰り返しますが、開発者が探すことができ、コントロールが実装する必要がある特定のインターフェイスはありますか?
過去に、常にBindingSource を使用するようになったのは、この混乱です。しかし、必要な場合にのみ使用するように、いつ使用するかをより正確に理解したいと思います。
c# - BindingNavigator の存在下で ListBox の SelectedItem をバインドする
ListBox の SelectedItem データをプロパティにバインドしようとしています。次のコードは例です。
アイテムを選択して先に進み、アイテムを選択してから終了すると、期待どおりに機能します。しかし、ナビゲーターを使用して外側の 2 つのオブジェクトを切り替えると、選択した項目が誤った値で上書きされているように見えます。BindingNavigator が要素に移動するたびに、ListBox はそのコレクションの最初の項目に移動するように指示され、その SelectedItem にバインドされた変数にあった値を上書きするようです。
これを修正する方法についてのアイデアはありますか? 前もって感謝します。
編集: これは、デバッグ バイナリを含むサンプル プロジェクトのアーカイブです。
http://www.mediafire.com/?dzmqmz0mynj
編集:これは、受け入れられた回答に基づくヘルパー関数です。
.net - DataGridView を手動で変更すると、基になるデータ ソースが更新されるのを一時的に防ぐことはできますか?
このような別の質問を見つけようとしました。これは確かに以前に尋ねられた可能性のあるもののように思われるためです。しかし、私はそれを見つけることができませんでした。
基本的に、私DataGridViewは にバインドされているを持っていBindingList<T>ます。一般に、データ バインディングは非常に優れており、(私たち -- 開発者の) 時間を大幅に節約できることを理解しています。ただし、このグリッドは非常に大きいため、パフォーマンスに重大な問題があります。
以前の経験に基づいて、タイマーを実装するのではなく、タイマーで表示されているセルだけを手動で更新することで、パフォーマンスを大幅に改善できると確信しています (このグリッドの値の多くは、1 回あたり数十回変化するため、実際には実行可能なオプションではありません)。秒) または呼び出します。しかし、問題があります。グリッド内のセルを 1 つずつ手動で更新すると、更新のたびにデータバインド オブジェクトの対応するプロパティがトリガーされ、合計するとパフォーマンスが大幅に低下します。DataGridViewINotifyPropertyChangedRefreshset
setグリッドのセルに入力する値はこれらのプロパティから直接取得されるため、これらすべての呼び出しを行う必要はありません (つまり、基本的に値を読み取ってからそれ自体に書き戻します)。
のこの機能を一時的に無効にできればいいのですがDataGridView、しばらくの間、グリッドの更新に基づいて基になるデータ ソースを更新する機能をオフにします。次に、手動での更新が完了したら、その機能を再びオンにして、ユーザーの更新がデータ ソースに影響を与えるようにします。
プロパティをに設定してBindingSource/を呼び出してみました。しかし、それはうまくいかないようでした。コールは引き続き行われました。DataSourceBindingList<T>SuspendBindingResumeBindingset
私がここで行っていることを達成する方法はありますか? 私は完全に間違った道を歩いていますか?
c# - BindingSourceを使用して、保留中の変更があるかどうかを確認するにはどうすればよいですか?
SQLサーバー上の単純なテーブルを編集するWinFormsプロジェクトでBindingSourceを使用しています。ユーザーがフィールドを変更した場合、ユーザーがフィールドをタブオフしたときに「保存」アイコンを点灯させたいです。DataSetのHasChanges()メソッドを試しましたが、変更を加えた後、これはfalseを返します。
ユーザーが何かを変更したかどうかはどうすればわかりますか?
c# - bindingsource 列の値にアクセスする
コードを使用してバインディング ソースの列の値を更新するにはどうすればよいですか?
私はこれに似た何かをしようとしています:
このコードは現在、「タイプ 'オブジェクト' の式に [] を使用したインデックスを適用できません」というエラーを示しています。
これを書き直す助けがあれば大歓迎です!
winforms - Datagridview の更新時に基になる Datatable で更新された行を見つけるにはどうすればよいですか?
これは私が達成しようとしているものです:
- 非データベース ソースからのデータを使用して設定された DataTable
- このテーブルは、BindingSource を使用して DataGridView にバインドされています
- DataGridView はユーザーによって更新されるため、一部のセルには新しい値が含まれるようになります。
- テーブルは datagridview にバインドされているため、その値が更新されます。
グリッド/データテーブルで更新された行 (編集された行) のみを取得するにはどうすればよいですか?
私が試してみました :
しかし、これは常に 0 行を返します。変更された行のみを取得する方法はありますか?
最悪の場合:
- 元のテーブルのコピーを保持する
- datagridview データソースから新しいテーブルを取得する
- すべての行を比較します。
ありがとう!
c# - c#バインディングソースとlinq
によって記入されたバインディングソースがあります
tableadapter.fill(DS、param1);
このバインディングソースには次のものがあるとしましょう:
linqを使用して、指定されたchar 'A'でnum値を取得するにはどうすればよいですか?
foreach(this.p_EM_Select_Event_TypeBindingSourceのDataRowViewデータ)を使用して読み書きできましたが、linqでこれを行う方法を知りたいです
ありがとう、
c# - DataTable.Select、BindingSource、およびforeach(C#、ADO.NET)を介した検索
DataTable Xがありますが、特定のエントリを検索する場合は、BindingSource.Filter、X.Select()、またはforeachを使用する方が高速/優れていますか?
c# - セルフ トラッキング エンティティを使用した Entity Framework フィルター nav プロパティ
私は自己追跡エンティティを使用しており、テーブル A と呼ぶテーブルを表すエンティティがあるシナリオがあります。A は、エンティティとしても表される別のテーブル B の親です。私のWinFormには、テーブルBの異なるタイプのレコードをそれぞれ表す3つの異なるバインディングソースがありますが、すべてテーブルAの子です。したがって、エンティティ/テーブルBのナビゲーションプロパティを使用して各バインディングソースを設定します
例えば
理想的には、各バインディング ソースの DataSource は TrackableCollection 型であるため、A を保存すると、B の 3 つのフィルター処理されたインスタンスへのすべての変更も保存されます。
これについていくつかの異なるオプションを試しましたが、運がなかったので、他の誰かがこの同じシナリオに遭遇したことを願っています.
ありがとう!