Проблема с изменением размера столбцов, динамически добавляемых во время выполнения в datagridview - PullRequest
0 голосов
/ 07 октября 2019

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

enter image description here

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

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

    }

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

1 Ответ

0 голосов
/ 07 октября 2019

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

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

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);
 }
...