DataGridView
をフォームに実装し、VirtualMode
を正常に実装しました。これにより、ローカルキャッシュからセルデータが取得され、グリッド/ページングなどをポピュレートするときに、すべてが正常に動作しているように見えます。DataGridView.CellValueNeeded
イベントを処理してセルを設定します。AutoResizeColumnを呼び出すタイミングは、VirtualModeのWinforms DataGridViewですか?
DataGridViewでは、AutoSizeColumnsMode
プロパティがDataGridViewAutoSizeColumnsMode.DisplayedCells
に設定されています。私は、VirtualModeを使用すると、DataGridViewはセルを設定した後にAutoSizeColumnsModeを尊重するようには見えないことに気付きました。私はthis articleを調べましたが、解決策が見つかりませんでした。私は最終的にやりたい何
はAutoSizeColumnsMode
性質に依存しているのではなく、サイズを変更するためにどこか.AutoResizeColumn()
方法を呼び出すので、私が最初に列を自動サイズ調整が、その後、ユーザがサイズを変更することができないことです。
私は、限定された、あるいはまったく成功して次のことを試してみました:
セット
DataGridView.AutoSizeColumnsMode
.None
に。それは 繰り返し.CellValueNeeded
を上げるため、そして、私の.CellValueNeeded
ハンドラprivate void dataGridView_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e) { // ... Get cell value from cache dataGridView.AutoResizeColumn(e.ColumnIndex, DataGridViewAutoSizeColumnMode.DisplayedCells); }
にこれはおそらく
StackOverFlowException
をスローします。は
.CellFormatting
イベントハンドラを除き、まったく同じことをしようとしました。同じStackOverFlowException
を得ました。は
DataGridView.SuspendLayout/ResumeLayout
でとせずにしようとしました:private void dataGridView_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e) { // ... Get cell value from cache dataGridView.CellValueNeeded -= dataGridView_CellValueNeeded; dataGridView.AutoResizeColumn(e.ColumnIndex, DataGridViewAutoSizeColumnMode.DisplayedCells); dataGridView.CellValueNeeded += dataGridView_CellValueNeeded; }
これは、すべての空白セル、ありませんので使用を提供します。
この1つは実際には多少私は理解していない理由のために、働く:
private void dataGridView_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e) { // ... Get cell value from cache dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells; }
それは正しく、列のサイズを変更し、繰り返し必要なすべてのセルの値でそれを呼び出すために持っている奇妙に思えます。また、直後に[いいえ]を設定することはできません。または
StackOverFlowException
にもう一度入力してください。したがって、ユーザーが列のサイズを変更できるようにすることはできません。.UpdateCellValue()
を私の.CellValueNeeded
ハンドラースローStackOverFlowException
の記事で説明したように呼び出します。
だから、それがオーバーフローするまで、それは.CellValueNeeded
は発生しません.AutoResizeColumn()
どこかで呼び出すことが可能ですか? #4はオートサイズ機能を実行する能力を持っているように思われるので、手動でどこからでも呼び出すことができるようです。