C # Авто Изменение размера формы до размера DataGridView - PullRequest
9 голосов
/ 22 октября 2009

У меня есть форма и DataGridView. Я заполняю DataGridView во время выполнения, поэтому я хочу знать, как динамически изменить размер формы в соответствии с размером DataGridView? Есть ли какое-либо свойство или метод? Или я должен сам определить размер и соответственно обновить?

Ответы [ 8 ]

6 голосов
/ 17 марта 2011

Вы можете найти фактическую ширину путем подсчета ширины столбцов.

Не забывайте, что ваша форма может быть более сложной, и вы должны учитывать другие элементы управления.

public class YourForm : Form
{
    public YourForm()
    {
        DataGridView _dgv = new DataGridView() { Dock = DockStyle.Fill};
        Controls.Add(_dgv);
    }
    public void CorrectWindowSize()
    {
        int width = WinObjFunctions.CountGridWidth(_dgv);
        ClientSize = new Size(width, ClientSize.Height);
    }
    DataGridView _dgv;
}

public static class WinObjFunctions
{
    public static int CountGridWidth(DataGridView dgv)
    {
        int width = 0;
        foreach (DataGridViewColumn column in dgv.Columns)
            if (column.Visible == true)
                width += column.Width;
        return width += 20;
    }
}
3 голосов
/ 22 октября 2009

Обычно элементы управления адаптируют свои размеры к размеру вмещающей формы. Чтобы настроить размер вашей формы в соответствии с размером вашего DataGridView, вам делать необходимо самостоятельно определить размер, а затем установить соответствующий размер формы, не обращая внимания на дополнительный размер, требуемый в меню формы. полосы и / или панели инструментов, строки состояния или другие элементы управления.

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

2 голосов
/ 02 августа 2013
int dgv_width = dataGridView1.Columns.GetColumnsWidth(DataGridViewElementStates.Visible);
int dgv_height = dataGridView1.Rows.GetRowsHeight(DataGridViewElementStates.Visible);
this.Width = dgv_width;
this.Height = dgv_height;

this.Width изменяет размеры этой ширины формы.

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

this.Width = dgv_width + 147;
this.Height = dgv_height + 47;
1 голос
/ 08 ноября 2012

Возможно, вы сможете использовать свойство PreferredSize ( MSDN PreferredSize запись ). Для DataGridView элементов управления я обнаружил, что предпочтительная ширина и высота были примерно на 20 единиц больше, чем я ожидал. Я предполагаю, что элемент управления может вычислять свой предпочтительный размер с учетом полос прокрутки.

Еще одно замечание, которое я обнаружил, заключается в том, что расчет PreferredSize не будет точным сразу после добавления или изменения элементов в таблице. Чтобы обойти это, я сделал обработчик для события RowHeadersWidthChanged.

Вот что у меня сработало:

class GridToy {
    private DataGridView grid;
    public GridToy(DataGridView dgv) {
        grid = dgv;
        grid.RowHeadersWidthChanged += AdjustWidth; // Event handler.
        Layout();
    }

    public void Layout() {
        // Just do some arbitrary manipulation of the grid.
        grid.TopLeftHeaderCell.Value = "Some Arbitrary Title";
    }

    public void AdjustWidth() {
        Control horizontal = grid.Controls[0]; // Horizontal scroll bar.
        Control vertical = grid.Controls[1]; // Vertical scroll bar.
        grid.Width = grid.PreferredSize.Width - vertical.Width + 1;
        grid.Height = grid.PreferredSize.Height - horizontal.Height + 1;
    }
}
1 голос
/ 29 ноября 2011

Я бы пошел в другом направлении и изменил размер сетки до формы. (некоторые пользователи могут иметь низкое разрешение) Установите свойство WindowState в форме => развернуто. (необязательный) Установите свойство 'anchor' DGV => 'Top, Bottom, Left, Right'.

0 голосов
/ 19 июня 2017

Набор AutoSizeColumnsMode :Fill в свойствах сетки

0 голосов
/ 27 апреля 2014

Вы можете установить для свойства "Высота" значение Авто в форме после классификации или использования идентификатора, и это должно сделать это,

Я только что попробовал .. и это сработало

#form1{
 background-color:white;
 height:auto;                             
 width:1500px;              
 border-top:medium solid #3399FF;
 margin-top:100px;
 margin-left:30px;
 display: inline-block;
 text-align: center;                
 float: none;      
}

Я просто делаю то, что сделал в случае, если вы потерялись. Не беспокойтесь о других свойствах моего дизайна.

0 голосов
/ 24 мая 2013

dataGridView1.AutoResizeColumns (DataGridViewAutoSizeColumnsMode.AllCells);

Надеюсь, это поможет:)

...