我有一个简单的表格,其中RightToLeft = true。表单中有一个面板,其中AutoScroll = true。面板中有一个非常长的宽度(2000px)的DataGridView。用户可以通过单击“添加列”按钮来添加列。
这是“添加列”按钮单击事件的代码:
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);
}