web-dev-qa-db-ja.com

水平スクロールバーがDataGridViewに表示されない

DataGridView on Windowフォームに30列と数千行が入力されています。 ScrollBarsプロパティはBothに設定されていますが、水平スクロールバーは表示されません。キーボードから矢印キーでスクロールすることさえできません。

ScrollBarsプロパティをHorizontalにも設定して試してみましたが、違いはありません。

何か提案がありますか?

ありがとう

15
Scorpion

まあみんな、それは整理されました。

私は自分の質問に答えています。それは将来誰かを助けるかもしれません。

列の1つにFrozenプロパティがTrueとして設定されています。これは、すべての列でfalseである必要があります。これでScrollBarは完全に問題なく動作します。

乾杯

enter image description here

38
Scorpion

これは既に解決済みであることはわかっていますが、これが発生する可能性がある別の理由に遭遇したので、他の誰かが同じ問題を抱えている場合の回答として追加したいと思いました。

フォームにドッキングするためのドッキングされたDataGridViewがフォームにあり、フォームにもステータスバーがある場合、作成された順序によっては、ステータスバーによってDataGridViewのスクロールバーが非表示になることがあります。これを修正するには、DataGridViewを右クリックして、[最前面へ移動]を選択します。

16
Dan

私はこの苛立たしい問題を抱えていました。私はすでにフォームにDataGridViewを作成しており、すべてのデータバインディングとプロパティ設定を.CSファイルに設定しています。

コードビハインドファイル(.cs)の行にコメントしました。

gvTblContent.AutoSize = true;

AutoSizeプロパティを設定する必要はありません。水平スクロールバーと垂直スクロールバーがデフォルトで提供されます。それ以外の場合は、次を使用できます。

gvTblContent.ScrollBars = ScrollBars.Both;
3
iltaf

同様の問題がありました。私がやったことは、Datagridの各列を確認し、Frozenを「false」に設定したことです。お役に立てば幸いです。

3

この厄介な問題が発生したとき、DGVのAutoSizeColumnsModeプロパティがFillに設定されていたことが原因でした。

そのプロパティをAllCellsに変更して修正しましたが、他の値でも機能します。 DGVがドッキングされていて、複数のドッキングパネルがあり、最初の列がFrozenの場合でも機能します。

3
Fabio Michelini

DGVのdocking.Fillは少しバグがあります。
これは、複数のドッキングされたパネル、ツールバーなどがある場合に発生します。実行時に列を作成する場合により一般的です。

コントロールは、コンテナーよりも幅が広いと見なし、水平スクロールバーは生成されません。

凍結、自動サイズ調整、前面からのブリント、およびその他の前述の対策が常に機能するとは限りません。最も信頼できる回避策は、Dock.Leftを実行して、実行時にDGVの幅を設定することです。このようにして、DGVがどれほど広いかについて混乱することはありません。

2
Joe

凍結したすべての列がフォームに収まるはずです。そうしないと、水平スクロールバーが表示されません。水平スクロールバーがない場合は、最後に固定されたフィールドが表示されるまでフォームの幅を広げると、水平スクロールバーが魔法のように表示されます。

0
Boris Vaiser

プログラムでいくつかの行を追加した後、frozenプロパティではなく同様の問題が発生しましたが、DataGridViewバグの可能性が高いです。 この答え を読んだ後、私が使用して解決した別の質問:

dgv.PerformLayout()

これらの行を追加した後、dgvが表示される直前。

0
BillyJoe

同じ問題があり、私のdataGridViewのサイズがフォームのサイズよりも少し大きいことがわかりました。フォームに収まるようにサイズを調整したところ、うまくいきました。お役に立てれば!

0
Robbie

最初の列を固定してtrueに設定しました(H_bar)はまだ機能します。しかし、私はfrozen = trueを非表示の列(column.visible = false)に設定しましたが、なくなりました。

0

私もVS2015のwinformでこの問題を抱えていました。

Winformのテーブルレイアウトは4行1列に分割されています。行に、最後の行にあるDataGrid行を除く他のコントロールを配置するためのパネルを配置します。 DataGridはDockを使用して設定されます。フォームの下部には、将来使用するためのステータスバーもあります。

前述のように、ステータスバーがスクロールバーをブロックしていることがわかりました。

テーブルレイアウトに別の行を追加しましたが、実行時とデザインの両方でフォームの下部に大きな空白スペースが表示されました。フォームのサイズを変更しても解決されませんでした。テーブルレイアウトの行の高さを設定しようとしましたが、機能しませんでした。 1ピクセル、5ピクセルなどを変更しませんでした。結局、私はあきらめてステータスバーを削除しましたが、いずれにせよそれを使用していませんでした。

0
Larry

私の場合、DOCK Fillの代わりにANCHOR Top、Bottom、Left、Rightを使用しました。

それを試してみてください。

0
Developer

私の場合、上記の固定された列の状態と読み取り専用に気づくまで、スクロールバーは表示されませんでした。私はdataGridViewの1つの編集可能な列と同様に、読み取り専用列の固定列を作成しました。削除するとfrozen=false編集可能な列の場合、水平バーが表示されます。

0
Kishor Oswal

私の問題を修正しましたが、上記のどれでもありませんでした。

私の状況では、実行時にフォーム全体を作成していました。各DataGridViewは、TableLayoutPanel内のDock.Fillでした。 TableLayoutPanelが1つしかない場合は、行または列を指定する必要はなく、100%にする必要があります。ただし、これを行うと、DataGridViewが破損します。行100%の定義を追加するだけで問題が解決しました。

0
Kopfs

私もこの問題に直面しています。私の場合、それは愚かな状況です。

DataGridViewの位置/サイズをフォームから外しているかどうかを確認してください。

0
Mystic Lin

TableLayoutPanel内のDataGridViewでも同じ問題が発生しました。

上記のどれも私を助けませんでした。

DataGridViewが設定されているtableLayoutPanelの列がAutoSizeに設定されていることがわかります。

解決策は、tableLayoutPanel列を実際の値またはパーセントに設定することです。

0
Emil Gospodinov

私の側に複数の表示/非表示列があると、同じ問題が発生していました。 dataGridView1.ScrollBars = ScrollBars.Both;を追加する必要がありました。 datagridviewのすべての列と行を処理した後

上記のいずれもそれ以前は役に立ちませんでした1.固定列なし2.フォームのロードにdataGridView1.ScrollBars = ScrollBars.Both;があります。 3.ステータスバーなし

0
Nikolay Popov

確認できることがもう1つあります。 GridViewコントロールの「Enabled」プロパティを「true」に設定する必要があります。 DataGridViewプロパティ:

0
user12616324

TableLayoutPanelのセル内にDataGridViewがあり、DataGridViewにスクロールバーが表示されていませんでした。 DataGridViewのサイズも、TableLayoutPanelのセルを埋めるためにドッキングされているDataGridViewで適切に管理されていなかったと思います。冷凍カラムはありませんでした。

パネル内にDataGridViewを配置し、パネルでAutoScroll = trueを設定して、パネルがスクロールを管理できるようにすることで、この問題を修正できました。パネルをドッキングしてTableLayoutPanelのセルの内側を塗りつぶし、DataGridViewをドッキングしてパネルの内側を塗りつぶしました。

0
David French