我希望默认情况下,列使用

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/

10-11 15:48