Проблема с изменением размера столбцов, динамически добавляемых во время выполнения в datagridview

У меня есть простая форма с RightToLeft = true. в форме есть панель с AutoScroll=true. а в панели есть DataGridView с очень большой шириной (2000px). пользователь может добавить столбцы, нажав кнопку «Добавить столбец».

введите здесь описание изображения

это код события нажатия кнопки "Добавить столбец":

 private void button1_Click(object sender, EventArgs e)
    {
        _index++;
        dataGridView1.Columns.Add(new DataGridViewTextBoxColumn() { Name = $"Col{_index}",HeaderText = $"Col{_index}"});

    }

проблема в том, что когда пользователь добавляет несколько столбцов и впервые щелкает одну из границ ColumnHeader, чтобы перетащить ее и изменить размер столбца, панель будет прокручиваться до конца влево, а столбец будет очень широким, что, естественно, не является моим желаемое поведение. в следующих кликах и изменении размера все работает идеально. как я могу решить эту проблему? Благодарность


person Moseyza    schedule 07.10.2019    source источник
comment
У вас есть [DataGridView].AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill, может быть? В противном случае вы можете установить столбец Width при его создании.   -  person Jimi    schedule 07.10.2019
comment
AutoSizeColumnsMode имеет значение по умолчанию = none. Установка ширины при создании столбца не решает проблему.   -  person Moseyza    schedule 07.10.2019


Ответы (1)


Вы можете изменять размер столбцов каждый раз, когда добавляете новый.

вы можете проверить это

PS: убедитесь, что для заголовка строки установлено значение false, чтобы не было конфликта с шириной сетки

private void updateWidth()
        {
            foreach (DataGridViewColumn item in dataGrid.Columns)
            {
                item.Width = dataGrid.Columns.Count == 0 ?
                                dataGrid.Width
                                : (int)(dataGrid.Width / dataGrid.Columns.Count);
            }
        }
int _index = 0;
private void button1_Click(object sender, EventArgs e){

            var col = new DataGridViewColumn();
            col.Name = $"Col{_index++}";
            col.CellTemplate = new DataGridViewTextBoxCell();
            dataGrid.Columns.Add(col);
            updateWidth();
        }
    }

Для фиксированной ширины вы можете сделать (с параметром AutoSizeColumnsMode, равным None):

int _index = 0;
int fixedWidth = 200;
private void button1_Click(object sender, EventArgs e)
{

            var col = new DataGridViewColumn();
            col.Name = $"Col{_index++}";
            col.Width = fixedWidth;
            col.CellTemplate = new DataGridViewTextBoxCell();
            dataGrid.Columns.Add(col);
 }
person lagripe    schedule 07.10.2019