在运行时动态将列调整大小的问题动态添加到datagridview

问题描述 投票:0回答:1

我有一个简单的表格,其中RightToLeft = true。表单中有一个面板,其中AutoScroll = true。面板中有一个非常长的宽度(2000px)的DataGridView。用户可以通过单击“添加列”按钮来添加列。

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

c# winforms user-interface datagridview datagridviewcolumn
1个回答
0
投票

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

您可以检查此

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);
 }
© www.soinside.com 2019 - 2024. All rights reserved.