問題タブ [currencymanager]
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# - C# バインディング: BindingList で CurrencyManager を無効にして、現在のアイテムの位置が維持されず、通知されないようにするにはどうすればよいですか?
同じ BindingList にデータバインドされた 2 つの ListBox があります。
問題は、選択した項目を GUI から変更すると、BindingList 内の位置が変更され、BindingList が他の ListBox に選択した項目を変更するように通知することです。
そのため、2 つの ListBoxes Selected Item も同期されていますが、これは私にとっては良くありません。
アイテムのリストを同期して維持したいと思います。カーソル位置なし。
維持されないようにそのカーソルを無効にするにはどうすればよいですか?
サンプル コード (デザイン時にフォームに 2 つの ListBox を追加し、SelectedIndexChanged イベントを登録し、ボタン クリック イベントをボタンに登録するだけです):
ありがとう、――ラン。
c# - GridView データに基づいて新しいフォームを表示する
メイン フォーム MainForm に GridView、radGvA133s があります。GridView の行をダブルクリックして、新しいフォーム A133Form を開いて、選択した行を編集できるようにしたいと考えています。
ダブルクリックのコードは次のとおりです。
A133Form コードは次のとおりです。
最後に、A133 クラスのコードを次に示します。
残念ながら、GridView をダブルクリックすると、次のエラーが表示されます。
このエラーは、ダブルクリック イベントの最初の行で発生します。
私はここで途方に暮れており、しばらくの間髪を引っ張っています。明らかな何かが欠けていますか?私の望む結果を達成するためのより簡単な(またはより良い!)方法はありますか?
どんな助けでも大歓迎です!
c# - CurrencyManagerがバインドされたオブジェクトに対してBeginEdit()/ EndEdit()メソッドを呼び出さないようにする方法
複数のテキストボックスと1つのデータグリッドを含むフォームがあります。1つの事業体をこのフォームにバインドできます。たとえば、BOは次のようになります。
したがって、フォームでは、FirstNameとLastNameはテキストボックスにバインドされ、Relativesはグリッドにバインドされます。また、フォームには[保存]ボタンと[キャンセル]ボタンがあります。[保存]ボタンをクリックするとIEditableObject.EndEdit()が呼び出され、[キャンセル]ボタンをクリックするとIEditableObject.CancelEdit()が呼び出されます。CancelEdit()メソッドで、グリッドにバインドされている親戚の変更を含め、ユーザーが行ったすべての変更を拒否したい。ここまでは順調ですね..
ただし、グリッドコントロールはCurrencyManagerを使用します(グリッドは実際にはDevexpressコントロールですが、WinFormsコントロールも使用していると思うので問題ありません)。また、CurrencyManagerは、ユーザーが行を変更するたびに、Relativesコレクション内のアイテムに対してBeginEdit()とEndEdit()を呼び出します。したがって、[キャンセル()]ボタンをクリックすると、FirstNameとLastNameの変更のみがキャンセルされます。これは、Relativesコレクションの子オブジェクトのEndEdit()が、グリッドの基になるCurrencyMangerによってすでに呼び出されているためです。では、質問-1回の呼び出しですべての変更を拒否できるようにCurrencyManagerがそのメソッドを呼び出さないようにするにはどうすればよいですか?
ありがとう!
c# - CurrencyManagerの位置を更新
ContextMenuStrip
で使用されているがありDataGridView
、DataGridViewはSplitContainer
パネル内にあります。私のユーザーは、グリッド内の任意の行を右クリックできるように要求しました。右クリックした行が選択された行になり、メニューが表示されます。SplitContainerパネル内にDataGridViewを配置するまで、私が作業してきたコード
最後の行に到達するまで、すべてが正常に機能しているようです
hitTestInfo.RowIndex
割り当てようとしている値が異なっていても、位置は常に-1のままです。これはSplitContainerパネルが原因でしょうか?もしそうなら、それを修正する方法について何か提案はありますか?
ありがとう
c# - DataGridViewをデータソースにバインドする-CurrencyErrorIndexOutOfRangeExceptionをスローします
私はこれについて数日間困惑していて、かなり殴られましたが、正直なところ、私はまだそれほど経験がなく、DataGridViewに問題があります-これは一般的なトピックのようです。
キュークラス:
ジョブクラス:実際には、さまざまなタイプの約30の値を保持しますが、それらはすべて同じ形式です。
DataGridViewを操作すると、次のエラーが発生します。
DataGridViewで次の例外が発生しました。
System.IndexOutOfRangeException:インデックスに値がありません。System.Windows.Forms.CurrencyManager.get_Item(Int32 index)at System.Windows.Forms.DataGridViewDataConnection.GetError(Int32 boundColumnIndex、Int32 columnIndex、Int32 rowIndex)
そして、デバッガーに入ると、最初のApplication.Run(new frmMain()でトリガーされます。一体何が間違っているのでしょうか。プログラムは正常に機能して更新されますが、デフォルトのエラーメッセージを抑制するためにイベントを処理することさえできません。
編集-回答!リストをクリアして再作成する代わりに、リスト内の値を更新するだけの方が効果的です。今のところ私はこのコードを持っています:
それを防ぎます!
.net - CurrencyManager からスローされ、飲み込まれた Exception をフェッチする
.NET Windows フォームCurrencyManager
は、移動中にスローされる例外を飲み込みます ( MSDN Social の「CurrencyManager.OnPositionChanged のバグ - 例外を食べる」を参照してください)。
ただし、CurrentChanged
イベント ハンドラーでスローされる可能性のある例外をキャッチまたはフェッチする必要があります。それを取得する方法はありますか?購読BindingComplete
して読んe.Exception
でも役に立ちません。
現時点では、古いアイテムの保存に失敗した場合、ユーザーはフィードバックを受け取りません。したがって、例外を取得する方法が必要です。
乾杯マティアス
c# - BindingSource を使用せずに CurrencyManager を使用してバインディングを制御する
bindingSource クラスを使用せず、Windows フォーム アプリケーションにバインド機能を実装することにしました。私はいくつかの点に成功していますが、複雑さはほとんどありません。理由を知りたいです。データソースと 3 つのコントロール (textbox1、textbox2、checkedBox1) から DataTable を埋めました。コントロールをバインドし、値を表示することができました。
ご想像のとおり、 myTable は、データベース テーブルから入力されたデータを含むデータ テーブルです。次のように、現在の行の値を CurrencyManager で取得できます。
しかし、現在の行を使用して値を変更したい場合、最初のフィールドが設定された後、他のフィールドは自動的に以前の値に変更されます。つまり:
最初の割り当ては機能しますが、編集が始まる前に textBox2、checkBox1 が値を元に戻すフォーム コントロールです。したがって、この方法で行全体を更新することはできません。
一方、BindingSource を使用すると、現在の行と同様のスタイルが得られます。
そして、この行のフィールドを次のように変更します。
編集を次のように終了します。
行全体が正常に変更されたため、すべてのテーブルを更新する準備ができています。違いを見て、bindingSourceを使わずに管理したいと思います。EndEdit() が行うものを使用する必要があるということですか? 私は何を見逃していますか、それとも強迫観念を忘れていますか?
.net - Decimal(またはObject)プロパティへのデータバインディング時にベースフィールドタイプを取得する
Valueと呼ばれるnull許容のDecimalプロパティを持つカスタムNumericEditorコントロールがあります。データフィールドをValueにバインドするときに、バインドされているデータの基になるTypeを取得して、ソースフィールドが整数データ型の場合に小数点以下の桁数の使用を制限できるようにします。
BindingContextChangedイベントでこれを行う必要があると思いますが、バインディング自体からデータフィールドのタイプを取得するにはどうすればよいですか?私のGoogle-Fuは現在私を失敗させています。
要するに、私はGetValueType
次の質問で言及されている方法のようなものを探しています: 単純なデータバインディング-バインドされたフィールド/プロパティの変更を処理する方法。Winforms、.Net
ValueプロパティがObjectの場合、このメソッドも便利だと思います。
c# - スレッドセーフ CurrencyManager
私のデータグリッドビューはリストにバインドされており、バックグラウンド スレッドでリストにアイテムを追加しています。UI スレッドで CurrencyManager.refresh を呼び出す場合、同期は必要ですか。つまり、同期せずに refresh と list.add を同時に実行できますか? ありがとう。
c# - DataSource を Datagridview に設定した後に行を追加する
データグリッドのデータソース バインディングに関して、多くの質問がありました。リストから DataSource を設定する DatagridView がありました
MyClass の場所
My DataGridView に新しい行を追加したい
ただし、Datagrid のDatasourceが List liにバインドされているため、エラーが発生することはありません。だから私の最初の質問は、どうすればこれを行うことができるでしょうか?
私の2番目の質問は、これを行うために、リストliを変更してデータの新しい行を追加し、それをデータグリッドのデータソースに設定する解決策を作成しましたが、それは実行可能な解決策ではないと思いますより良い解決策はありますか?
CurrencyManager でやろうとしても
私がそれを通して知っているように、私は投稿の 1 つMake Row Visible falseで実行したように、Grid にフォーマットを提供するために DataGrid の Binding を一時停止しました。しかし、データグリッドに行を追加する際にここで機能しないのはなぜですか?