問題タブ [datagridview]
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# - マウスホイールを使用して、DataGridView を一度に 1 項目ずつスクロールさせるにはどうすればよいですか?
このコントロールでマウス ホイールを使用する場合、DataGridView の既定の動作をオーバーライドしたいと考えています。デフォルトでは、DataGridView は SystemInformation.MouseWheelScrollLines 設定と同じ数の行をスクロールします。やりたいことは、一度に 1 つの項目だけをスクロールすることです。
(DataGridView に画像を表示しますが、これはやや大きいです。このスクロールのため、3 行 (典型的なシステム設定) は多すぎて、ユーザーが見えない項目までスクロールすることがよくあります。)
私はすでにいくつかのことを試しましたが、これまでのところあまり成功していません。ここに私が遭遇したいくつかの問題があります:
MouseWheel イベントをサブスクライブすることはできますが、イベントを処理済みとしてマークして独自の処理を行う方法はありません。
OnMouseWheel をオーバーライドできますが、これが呼び出されることはありません。
ベースのスクロール コードでこれを修正できるかもしれませんが、他のタイプのスクロール (キーボードを使用するなど) が同じパイプラインを通過するため、面倒な作業のように思えます。
誰でも良い提案がありますか?
与えられた素晴らしい答えを使用した最終的なコードは次のとおりです。
c# - 既存の列を使用してデータグリッドビューに行を追加する
いくつDataGridViewかの作成された列があります。いくつかの行を追加したところ、正しく表示されました。ただし、セルをクリックすると、コンテンツが消えます。
私は何を間違っていますか?
コードは次のとおりです。
ありがとう!
c# - C# ResetBinding が DataGridView を反転 *例で更新*
部分的に解決された問題がありました。簡単に説明すると、シリアライズが必要な複雑なオブジェクトにバインドされたグリッドがあります。オブジェクトがシリアライゼーションからビルドバックされると、グリッドのようなイベントはテーブル表示を更新しません。シリアル化を解除したら、イベントを再構築するように誰かに言われましたが、うまくいきました! しかし、グリッドを更新するイベントはまったく発生していないようです。
内部で何かが変化したことを知らせる複雑なオブジェクトからイベントを作成する必要がありました。このイベントから、このコードを追加しました:
問題は、グリッドが反転していて、ユーザーが良い感覚を持っていないことです (行が上下に移動し、停止するよりも)。
この種の反転を行わずにバインドをリセットするにはどうすればよいですか? どうすれば元の問題を解決できますか? (これにより、すべてが自動的に解決されます)。
アップデート
まったく同じ動作をする例を次に示します。
クラスを作成します。
ここで、BindingSource 呼び出し "bindingSource1" を使用してフォームを作成し、クラスをデータソースとして使用します。グリッドを作成し、グリッドを bindingsource1 にバインドします。
そのフォームでは、ロードで次のコードを使用します。
シリアル化プロセスをコメントに入れました。これがないと同じ奇妙な動作をするように見えるためです...今すぐアプリケーションを起動します。クライアントの名前を変更します。「新しい名前」の例「p1」を選択し、変更したセルの下のセルをクリックします。「len」列が変化していないことがわかります。ただし、len のあるセルをクリックすると、数値が正しい値に変化することがわかります。
誰でも理由がわかりますか?
c# - DataGridView のバインドされたテーブルは、ダブルクリックで 1 つの RowChanged イベントのみを生成します。どうすれば2つにできますか?
DataSource が DataTable である DataGridView があります。この DataTable にはブール列があり、DataGridView のチェックボックスとして解釈されます。
ユーザーがチェックボックスを 1 回クリックすると、チェックボックスがオンになり、selectionTableRowChanged は「Is Selected」を出力します。
同様に、ユーザーが再度チェックすると、ボックスはクリアされ、selectionTableRowChanged は「選択されていません」を出力します。
ここに問題があります:
ユーザーがチェックボックスをダブルクリックすると、チェックボックスがチェックされ、RowChanged イベントが呼び出され (「Is Selected」)、チェックボックスがクリアされ、対応する RowChanged イベントは呼び出されません。現在、RowChanged イベントのサブスクライバーは同期していません。
私の現在の解決策は、DataGridView をサブクラス化し、WndProc をオーバーライドして WM_LBUTTONDBLLICK を食べることです。これにより、コントロールのダブルクリックは無視されます。より良い解決策はありますか?
.net - カスタマイズされた DataGridView 列は、Windows Vista で入力された小数点区切り記号を受け入れません
プロジェクトでは、NumericUpDown コントロールを含むカスタム DataGridView 列を作成しました。Microsoftからの提案と同様に実装されています
この列は、Windows XP で正常に動作します。入力された数字と小数点記号を受け入れます。Windows Vista では、コントロールが数値キーパッドによって入力された小数点記号のみを受け入れ、キーボードのメイン ブロックからは受け入れないという奇妙な問題があります。
Windows Vista でドイツ語 (スイス) のカルチャ設定を使用していて、ドイツ語 (スイス) のキーボード レイアウトが有効になっていることを付け加えておきます。スイスの小数点記号は です。
誰かがその理由とおそらく解決策について考えを持っていますか? どうもありがとうございました!
マイケル
編集: 問題の解決策を見つけました。
状況をもう少し明確にするために。私が使用する NumericUpDown コントロールは、IDataGridViewEditingControl を実装し、NumericUpDown から継承します。IDataGridViewEditingControl があるため、EditingControlWantsInputKey メソッドを実装します。そして、このメソッドの実装で、自分の間違いや何がうまくいかなかったのかを見つけました。
メソッドでは、入力されたキーを検査し、コントロールがそれを処理する必要があるかどうかを判断しました。しかし、小数点記号については、Keys.Decimalのみを期待していました。私の特別な (間違った) ケースでは、キーを一致させることができませんでした。欠けていたのは、 Keys.OemPeriodも探すことでした。そして、それが修正でした。
winforms - DataGridViewデータのデータをExcelスプレッドシートにエクスポートするにはどうすればよいですか?
Winformsアプリケーションで、DataGridViewからExcelスプレッドシートにデータをエクスポートしたいと思います。
結果をコンマで区切ってループして出力するだけの仕事ですか?
.net - 右クリックして datagridview 行を選択します
右クリックでデータグリッドビューの行を選択するにはどうすればよいですか?
c# - DataGridViewComboBoxColumn に無効なデフォルト値を表示する
Windows アプリケーションの DataGridView に DataGridViewComboBoxColumn があります。ユーザーは、他の場所で設定を変更して、DataGridViewComboBoxColumn での選択を無効にする可能性があります。リストで有効なアイテムのみを選択可能なままにして、無効なアイテムを保持/表示する必要があります。
選択を修正しないと、例外がスローされます:
DataGridViewComboBoxCell 値が無効です。
設定をキャッチして無視すると、選択した値がリスト内の最初の有効な項目に戻ります。
選択可能な値のリストに表示されないように、DataGridViewComboBoxColumn に値を提供する方法はありますか?
c# - 最後の行のデータバインドされた DataGridView C# を削除します
私は VS 2008/C# を使用しており、ヘルパー クラスのローカル リストを DataGridView コントロールの DataSource としてバインドしています。ヘルパー クラスのリストで Remove() メソッドを呼び出すと、DataGridView の CellFormatting イベントが発生します。これは (少し) 理にかなっています。
グリッドの最後の行の DataBoundItem を削除する場合 (グリッドに複数の行がある限り)、DataGridView の Rows コレクションは、このイベントが発生する前に更新されません。そのため、Rows コレクションが大きすぎるため、CellFormatting イベント ハンドラーで IndexOutOfRangeException が発生します。
DataGridView.Rows.Remove() メソッドを使用して行を削除し、リストをデータ ソースとして直接バインドするのではなく、BindingSource を使用してバインドしようとしました。
Google を介してこの発生に関するいくつかの参照を見つけましたが、答えがすぐに出なかったか、DataGridView または DataGridView.Rows コレクションのいずれかで Delete() メソッドを使用すると言われましたが、どちらも現在存在しません。
並べ替えを実行しても実行しなくても同じ結果になるため、並べ替えも問題ではないようです。
削除の問題である「最後の行」の唯一の例外は、DataGridView に含まれる行が 1 つだけの場合です。この場合、すべて正常に動作します。
c# - エスケープ時にデータグリッドビューが再配置されるのはなぜですか
管理された C# プロジェクトのフォームに DataGridView コントロールがあります。(.net 2.0) マウスのスクロール ボタンを使用してセルをクリックし、エスケープ ボタンをクリックするか、別のセルを選択すると、グリッドが再配置されます。しかし、コントロールでスクロールバーを使用すると、この動作は発生しません。
誰かが以前にこのような行動を見たことがありますか、または何が原因であると考えていますか?