c # изменить размер столбцов таблицы данных, чтобы они соответствовали элементам управления - PullRequest
7 голосов
/ 16 ноября 2010

У меня есть сетка данных, которая прикреплена и привязана к панели в Winform. Когда я изменяю размер формы, размер сетки данных изменяется, как и ожидалось, но столбцы не меняются в соответствии с размером таблицы данных. Вместо этого у меня остается цвет фона Datagridview.

Как заставить столбцы расти с помощью элемента управления?

Спасибо.

Ответы [ 3 ]

12 голосов
/ 16 ноября 2010

Вы всегда можете использовать AutoSizeColumnsMode свойство

Это свойство позволяет настроить элемент управления таким образом, чтобы ширина столбцов автоматически настраивалась либо для заполнения элемента управления, либо для соответствия содержимому ячейки. Корректировка размера происходит в режиме заливки всякий раз, когда изменяется ширина элемента управления.

Для этого на странице MSDN гораздо больше информации.

10 голосов
/ 16 ноября 2010

Вы можете установить AutoSizeMode свойство одного из столбцов равным Fill.Тогда этот столбец всегда будет изменять свой размер, чтобы заполнить все доступное пространство, не используемое другими столбцами.

6 голосов
/ 16 ноября 2010
private void dataGrid_SizeChanged(object sender, EventArgs e)
{
    ResizeGridColumns();
}

private void ResizeGridColumns()
{
    //get sum of non-resizable columns width
    int diffWidth = 0;
    foreach (DataGridViewColumn col in this.dataGrid.Columns)
    {
        if (col.Resizable == DataGridViewTriState.False && col.Visible) diffWidth += col.Width;
    }

    //calculate available width
    int totalResizableWith = this.dataGrid.Width - diffWidth;

    //resize column width based on previous proportions
    this.dataGrid.ColumnWidthChanged -= new DataGridViewColumnEventHandler(dataGrid_ColumnWidthChanged);
    for (int i = 0; i < this.colWidthRaport.Count; i++)
    {
        try
        {
            if (this.dataGrid.Columns[i].Resizable != DataGridViewTriState.False && this.dataGrid.Columns[i].Visible)
            {
                this.dataGrid.Columns[i].Width = (int)Math.Floor((decimal)totalResizableWith / this.colWidthRaport[i]);
            }
        }
        catch { }
    }
    this.dataGrid.ColumnWidthChanged += new DataGridViewColumnEventHandler(dataGrid_ColumnWidthChanged);
}

private void dataGrid_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e)
{
    CalculateGridColWidthsRaport();
}

/// <summary>Calculates the proportions between grid width and column width</summary>
private void CalculateGridColWidthsRaport()
{
    //get sum of non-resizable columns width
    int diffWidth = 0;
    int colWidthsSum = 0;
    foreach (DataGridViewColumn col in this.dataGrid.Columns)
    {
        if (col.Visible)
        {
            colWidthsSum += col.Width;
            if (col.Resizable == DataGridViewTriState.False) diffWidth += col.Width;
        }
    }
    colWidthsSum += 24;

    //calculate available with
    int totalResizableWith = colWidthsSum - diffWidth;// this.dataGrid.Width - diffWidth;
    if (this.ParentForm.WindowState == FormWindowState.Maximized)
    {
        totalResizableWith = this.dataGrid.Width - diffWidth;
    }

    //calculate proportions of each column relative to the available width
    this.colWidthRaport = new List<decimal>();
    foreach (DataGridViewColumn col in this.dataGrid.Columns)
    {
        this.colWidthRaport.Add((decimal)totalResizableWith / (decimal)col.Width);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...