我希望默认情况下,列使用
AutoSizeMode = DisplayedCells;
但我也希望有可能调整列的大小,但
DisplayedCells
类型不允许调整大小..有任何想法吗?
最佳答案
我认为您无法实现这一点,因为 AutoSizeMode 一次设置为 DisplayedCells,所有行为都是由设计控制的。但我有这个想法。您应该将您的列(我认为 Columns[0] 用于演示目的) AutoSizeMode 固定在 DataGridViewAutoSizeColumnMode.None
。您希望将其设置为 DisplayedCells
,因为您可能希望根据单元格文本长度来扩展或折叠列宽。所以我的想法是每次 CellBeginEdit
启动时,我们将 AutoSizeMode
设置为 DisplayedCells,当 CellEndEdit
启动时,我们在将 AutoSizeMode
重置为 None
之前保存宽度(为您自动调整大小),然后将列宽度分配给该保存的值。这是我的代码:
//First before loading data
private void form_Load(object sender, EventArgs e){
dataGridView.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
//Fill your dataGridView here
//.........
//.........
int w = dataGridView.Columns[0].Width;
//reset to None
dataGridView.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
dataGridView.Columns[0].Width = w;
}
//Now for CellBeginEdit and CellEndEdit
private void dataGridView_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
if(e.ColumnIndex == 0) //because I suppose the interested column here is Columns[0]
dataGridView.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
}
private void dataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if(e.ColumnIndex == 0){
int w = dataGridView.Columns[0].Width;
dataGridView.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
dataGridView.Columns[0].Width = w;
}
}
我测试了代码,它似乎工作正常,有一种情况会不起作用,因为我们没有为这种情况添加代码,即 Cell 值被代码更改时。
我不得不说你的需求有点奇怪,我不太关心列的宽度,用户应该知道如何处理它。
关于时间:2019-05-02 标签:c#datagridviewcolumnautosizemode,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16987308/