問題タブ [bindinglist]
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.
data-binding - .NET DataBinding、リストからアイテムを削除する前の確認
データソースとグリッド コントロールとして BindingList があり、ユーザーがグリッド内の行を削除した場合、確認 (メッセージ ボックスなど) を取得する必要があります。
私が使用しているグリッド コントロール (そして、それらのほとんどを推測します)、RemoveAt(int index)、void の戻り値を持つ Collection のメソッドを呼び出します。bindingList から継承する場合でも、メソッドをオーバーライドするか、新しいそれ(およびその他)の実装、グリッドはユーザーが操作のキャンセルを選択したことを知る方法がないため、役に立ちません...
データバインディングとストックバインディングリスト、グリッドコントロールのみを使用して問題を回避する方法はありますか?
私が行った回避策は次のとおりです。BindingList フォームを継承し、ICancellableRemoving を実装します (単一の "bool RemoveItem(object item)" を含みます)。 b. グリッドから継承し、remove メソッド (または同様のもの) をオーバーライドし、データソースが ICancellableRemoving を実装しているかどうかを確認し、実装している場合はメソッドを呼び出します。 、結果を調べて、それに応じて操作をキャンセル/続行します。
PS インターフェイスを実装したのは、Bool の戻り値を持つ BindingList の唯一の「Remove*」メソッドが Collection の Remove(T Item) であり、それが一般的であるためです...グリッドはそうではありません ;)
前もってありがとう、エリック。
c# - 意見が欲しかった:リスト/コレクションへの変更を傍受する
BindingList<T>
リストの変更を検出するメカニズムを提供しますが、変更が発生する前ObservableCollection<T>
に変更を検出/インターセプトするメカニズムはサポートしていません。
私はこれをサポートするためにいくつかのインターフェースを書いていますが、あなたの意見を広めたいと思います。
オプション1:リストはアクションのタイプごとにイベントを発生させます
ここで、消費者は次のようなコードを書くかもしれません:
オプション2:リストは単一のイベントを発生させ、アクションはイベント引数から決定されます
ここで、消費者は次のようなコードを書くかもしれません:
背景:DDDのコアコンポーネントを表す一連の汎用インターフェイス/クラスを作成しており、ソースコードを利用できるようにしています(したがって、使いやすいインターフェイスを作成する必要があります)。
この質問は、消費者がコアセマンティクスを失うことなく独自のコレクションを導出および実装できるように、インターフェイスを可能な限りまとまりのあるものにすることに関するものです。
PS:私はすでにそのアイデアを割り引いているので、各リストの使用AddXYZ()
と方法を提案しないでください。RemoveXYZ()
PPS:.NET2.0を使用する開発者を含める必要があります:)
c# - DataGridView の上にある新しい項目フィールド
DataGridView
in .Net には、下部に新しいアイテムを追加するためのサポートが組み込まれています。最後の行は特別な方法で処理されます。IBindingSource
インターフェイスは、AddNew/EndNew/CancelNew メソッドを通じてこれをサポートします。これを変更して、代わりにグリッドの一番上の行にアイテムを追加できるようにすることはできますか?
最初はプログラムでできることはわかっていsourceList.Insert(0, item)
ますが、詳細には悪魔がいて、これを行う方法がすでにあるのではないかと思います。
データは (データベースではなく) バウンドから取得されIBindingList
ます。
bindinglist - 読み取り専用の BindingList を返す方法
List を持つ既存のクラスがあり、この List を BindingList に変更する必要がありますが、クラスにはこのリストの ReadOnlyCollection を返すプロパティがあります。このリストはこのクラス内でのみ変更できることが重要です。ここで、この List を BindingList に変更する必要があります。これにより、リストが変更されたときに別のクラスで通知を受け取ることができます。別のクラスでこのリストを参照するように DataBindingSource.DataSource を設定するために私が知っている唯一の方法は、この BindingList を返すプロパティを提供することですが、これによりリストが公開され、読み取り専用機能が解除されます。DataBindingSource.DataSource を別のクラスに設定し、リストが他のクラスに公開されないようにする方法はありますか。以下はサンプルコードです
MessageManager は既存のクラスです。下線付きのmessageListを公開せずにBrowserクラスのmessageListにバインドする方法はありますか?
c# - BindingList をコレクションにバインドする
次のようなコレクションを返すライブラリがあります。
public IEnumerable Alerts { .. }
そして、このコレクションを GUI で使用する BindingList に変換したいと考えています。BindingList を IEnumerable コレクションと同期させる最善の方法は何ですか?
編集:この問題については、ライブラリを制御できず、実際の実装ではリストを使用していると仮定します。
しかし、このコードには触れたくありません。
このライブラリには、AddAlert、RemoveAlert などとの優れたインターフェイスもあります。GUI をこれらすべての変更と同期させる最善の方法は何ですか?
c# - LINQ クエリの結果を BindingList にキャストできますか?
私が学んだことから、BindingList にキャストすることはできませんが、Linq クエリからの結果を NEW BindingList でラップすることができます。ただし、元のバインド リストにいくつかのイベントが関連付けられており、LINQ 結果セットで同じイベントを維持したいため、これはうまくいきません。
例えば:
「Reports」(IReport 型) というメインの BindingList コレクションがあります。このコレクションは次のようにイベントに登録されています: Reports.AddingNew += OnAddNewXReport;
今、この大きなコレクションをフィルタリングして、一致するアイテムをいくつか抽出したい場合、Linq を使用してこの一致リストを取得しています。このリストを BindingList にするには、次のことを行う必要があります。
ご覧のとおり、この新しく作成されたコレクションは、新しいアイテムが追加されているときに起動しません。
これを解決する方法を知っている人はいますか? 元のBindingListから「フィルタリングされた」BindingListへのイベントサブスクリプションを閉じる方法はありますか?
助けてくれてありがとう
c# - DataGridviewを使用したリストプロパティの編集
OK、カスタムクラスがあります:
そして、DataSourceがFilesystemEntriesに設定されたDatagridView1があります。
すでに行を追加および削除できます-これらの変更はコレクションに反映されます。ただし、DataGridViewで値とIDを変更すると、値とIDは入札リストに保存されません。IDは常に0で、値は「」です。
どうすればこれを機能させることができますか?プロパティを編集できるようにするには、FileItemへのインターフェイスを実装する必要がありますか?
DGVのReadOnlyは、すべての列と同じようにfalseに設定されます。編集、削除、変更が有効になります。
c# - BindingListプロジェクションラッパー
BindingList
元のリストが更新されると更新されるラッパー(プロジェクション付き)を作成する簡単な方法はありますか?
たとえば、数値の可変リストがあり、それらをComboBoxで16進文字列として表現したいとします。このラッパーを使用して、次のようなことができます。
リストを新しいものにラップし、BindingList
すべてのソースイベントを処理し、リストを更新してこれらのイベントを再度発生させることもできますが、すでにもっと簡単な方法があると感じています。
c# - C#BindingListをコピーする最良の方法は何ですか?
BindingList をコピーする最良の方法は何ですか?
ForEach() を使用するだけですか? それとももっと良い方法がありますか?
c# - bindinglist で作成された C# bindinglist
複数のバインディングリストで構成されるバインディングリストを作成する簡単な方法はありますか? つまり、それがリストの「ビュー」です。
つまり、3 つのリスト (list1、list2、list3) があります。常に 3 つの listx の結合であるリストが必要です (2 つの異なるリストにはオブジェクトが含まれていないと仮定できます)。
確かに、ListChange プロパティを使用することはできますが、もっとスマートな方法があるのではないでしょうか?