DGV には、ユーザーが入力した値が入力されています (データにバインドされていません)。行数は動的です。ただし、デフォルトの 5 行であっても、セルからセルへ、および行から行へとタブ移動すると、最初の行 (行 0) が、最後の (5 番目の) 行 / 行 4 に到達すると、DGV の「上下」に消えてしまいます。
カーソルの位置に基づいて移動するのではなく、5 (または多くの) 行が常に同じ場所に留まるようにします。
このシナリオでこれがデフォルトの動作である理由はわかりませんが、それについて興味がありますが、ほとんどの場合、この奇妙さを防ぐ方法を知る必要があります.
ユーザーが行を追加すると、次のように各行の高さを計算します。
dataGridViewPlatypi.Rows.Add();
int newRowHeight = dataGridViewPlatypi.Height / dataGridViewPlatypi.RowCount;
for (int i = 0; i < dataGridViewPlatypi.RowCount; i++)
{
dataGridViewPlatypi.Rows[i].Height = newRowHeight;
}
...この不正確な計算により、除算に剰余/モジュロがある場合、グリッドの下部に「余分なスペース」が生じる可能性があります。たとえば、次のようになります。グリッドの一番下にありますが、繰り返しになりますが、デフォルトの 5 行が高さ 160 ピクセルの DGV (行あたり 32 ピクセル) に収まっている場合でも、この不安な動作が発生します。
プロパティを設定する必要があるのか、DGV、行、セル、または...??? のコードを記述する必要があるのか わかりません。
アップデート
設計時に DGV の高さに 2 を追加すると (160 ではなく 162 になり、各行が 32 になり、「DGV 用」に 2 ピクセルが残るため、デフォルトの 5 行で動作することがわかりました。
ただし、ユーザーが追加の行を追加するときに調整しようとすると、問題が発生することがわかっています。次の厄介なコードは機能しません。
// Adding one extra pixel is not enough; 2 is the least that can be added to prevent the last phantom grey row from appearing
const int BASE_GRID_HEIGHT_SHIM = 2;
const int DEFAULT_ROW_COUNT = 5;
dataGridViewPlatypi.Rows.Add();
int shimAdjustment = dataGridViewPlatypi.RowCount - DEFAULT_ROW_COUNT;
int newRowHeight = dataGridViewPlatypi.Height / dataGridViewPlatypi.RowCount;
int newGridHeight = (newRowHeight * dataGridViewPlatypi.RowCount) + BASE_GRID_HEIGHT_SHIM + shimAdjustment;
for (int i = 0; i < dataGridViewPlatypi.RowCount; i++)
{
dataGridViewPlatypi.Rows[i].Height = newRowHeight;
}
dataGridViewPlatypi.Size = new Size(dataGridViewPlatypi.Width, newGridHeight);
注: 列 0 をクリックしても、行を押し上げて行 0 を非表示にし、DGV の柔らかい灰色の下腹部を明らかにすることはできません。この「押し上げ」が発生するのは、列の 1 つから次の列にタブ移動した後でのみです (FWIW)。
更新 2
これが私が豊富な答えを適用した方法です。
private void buttonAddRow_Click(object sender, EventArgs e)
{
AddAPlatypusRow();
for (int i = 0; i < dataGridViewPlatypi.RowCount; i++)
{
FreezeBand(dataGridViewPlatypi.Rows[i]);
}
}