C# 调整在运行时动态添加到datagridview的列的大小时出现问题
我有一个简单的表单,RightToLeft=true。 表单中有一个面板,其AutoScroll=true。面板中有一个DataGridView,宽度很长(2000px)。 用户可以通过单击“添加列”按钮添加列 这是“添加列”按钮点击事件的代码: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
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的默认值为无。在创建列时设置宽度并不能解决此问题