Почему DataGridView не подходит под строки? - PullRequest
0 голосов
/ 17 ноября 2011

Я пытаюсь создать выпадающую форму без полей для своего пользовательского поля со списком.Выпадающая форма содержит сетку, из которой пользователь может выбирать элементы.По большей части это работает.Но я заметил, что в нижней части сетки есть место, которое не содержит никаких данных.Я установил AllowUserToAddRows в false.В любом случае, дополнительное пространство даже не включает ячейки - это просто пустое пространство управления.Просто чтобы убедиться, что дополнительное пространство было в сетке (а не в форме), я установил сетку BackgroundColor на желтый, и он отображается в форме, поэтому я знаю, что дополнительное пространство находится в сетке.

Примечание: я добавляю сетку к форме программно.Я не уверен, если это имеет значение.И я изменяю размер формы в зависимости от размера сетки.Ширина формы устанавливается равной ширине сетки.Если сетка содержит более 10 строк, я устанавливаю высоту формы для отображения только 10 строк, а вертикальная полоса прокрутки позволяет пользователю прокручивать.Если сетка содержит менее 10 строк, я устанавливаю форму, чтобы точно соответствовать этим строкам, и вертикальная полоса прокрутки не требуется.Похоже ли это на размер сетки?

Я делаю следующее в событии VisibleChanged формы, чтобы изменить размеры формы на основе содержимого сетки.Обратите внимание, что это может быть опечатки, так как я перепечатал его с распечаткиПримечание: MaxRowsToShow = 10.

int rowsHeight = _grid.Rows.GetRowsHeight(DataGridViewElementStates.Visible);
int rowCount = _grid.Rows.GetRowCount(DataGridViewElementStates.Visible);
int rowHeight = _grid.RowTemplate.Height;
int rowsToShow = Math.Min(MaxRowsToShow, rowCount);
Height = rowsToShow * rowHeight + _grid.ColumnHeadersHeight;

ОБНОВЛЕНИЕ: Я добился определенного прогресса.Я обнаружил, что установка свойства ScrollBars объекта DataGridView равным ScrollBars.Vertical создает дополнительное пространство в конце сетки.Если я установлю ScrollBars на ScrollBars.None, когда у меня будет менее 10 элементов, я не вижу дополнительного пространства.Но мне все еще нужны вертикальные полосы прокрутки, когда у меня больше 10 предметов, поэтому я все еще вижу дополнительное пространство в этом случае.Но, по крайней мере, я выяснил источник проблемы.Кто-нибудь знает, почему свойство ScrollBars вызывает это странное поведение.

Ответы [ 2 ]

0 голосов
/ 06 декабря 2011

У вас есть пользовательский элемент управления или форма, размер которых должен быть таким же, как у сетки?

Если это так, установите размер формы. Любой элемент управления, использующий его, может затем изменить его размер так, как он хочет, но у него есть размер для макета. Затем поместите элемент управления контейнера в форму и установите контейнер (например, панель) в Dock -> Fill. Затем поместите сетку в этот контейнер и также установите его в Dock -> Fill. Тогда прекратите пытаться установить высоту и прочее сетки. У него будет комната, в которой он может находиться.

Winforms предназначен для того, чтобы элементы управления наследовали ширину и высоту своих родителей и имели размеры, подходящие для них; Сброс формы в соответствии с сеткой, это своего рода назад. Пользователь (или программа) должен изменить размер формы и размер сетки вместе с ней.

Если сетка не должна занимать всю форму, вы можете просто разделить контейнер и привязать сетку к верхнему / левому / правому (для верхней заливки) вместо установки свойства Dock.

0 голосов
/ 17 ноября 2011

Вы пробовали атрибуты:

VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"

?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...