C# 调整在运行时动态添加到datagridview的列的大小时出现问题

C# 调整在运行时动态添加到datagridview的列的大小时出现问题,c#,winforms,user-interface,datagridview,datagridviewcolumn,C#,Winforms,User Interface,Datagridview,Datagridviewcolumn,我有一个简单的表单,RightToLeft=true。 表单中有一个面板,其AutoScroll=true。面板中有一个DataGridView,宽度很长(2000px)。 用户可以通过单击“添加列”按钮添加列 这是“添加列”按钮点击事件的代码: private void button1_Click(object sender, EventArgs e) { _index++; dataGridView1.Columns.Add(new DataGri

我有一个简单的表单,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的边框之一来拖动它并调整列的大小时,面板将滚动到左边,列将非常宽,这自然不是我想要的行为。在接下来的点击和调整大小中,每件事情都非常完美。 我如何解决这个问题?
谢谢

您可以在每次添加新列时调整列的大小

你可以查一下

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

您是否有[DataGridView].AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode.Fill?否则,您可以在创建列时设置列的宽度。AutoSizeColumnsMode的默认值为无。在创建列时设置宽度并不能解决此问题