System.InvalidOperationException:在调整自动填充列时无法执行此操作

时间:2013-02-18 10:22:19

标签: c#

我在winform应用程序中有DataGridView并设置

this.dgvDte.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;

运行我的项目时打开该表单 有时但并不总是让我犯这个错误

  

“System.InvalidOperationException:无法执行此操作   正在调整自动填充列的大小“

任何身体都可以帮助我实现它的发生吗?

3 个答案:

答案 0 :(得分:17)

this.dataGridView1.ColumnHeadersHeightSizeMode设置为AutoSize

在创建DataGridView时,如果鼠标突然位于Column标头所在的位置,DataGridView将尝试处理CellEnter事件,并尝试调整列或其他内容的大小,但现在DataGridView是还在创造。

结果,抛出InvalidOperation

解决方法如下:

在客户提供的项目GridWrapper.cs文件中,在InitializeComponent();

之后添加以下行
this.dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;

将以下行放在GridWrapper_Load方法中:

this.dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;

许多客户发现在forums中讨论此类问题很有用,微软和社区的其他成员可以推荐这些方法来实现您的目标。

link

中回答

答案 1 :(得分:4)

正如在MS论坛(by MS)上报告的那样,DataGridView抛出了异常。据我所知,当初始化控件时鼠标光标位于datagridview clientrectangle内时会发生这种情况。 MS告诉我们他们允许(“按设计”)列调整大小事件和单元格输入事件同时强制抛出异常。建议的解决方法并没有解决我的问题。

由于MS似乎没有兴趣解决这个问题,我发现,对我来说,有两个解决方案可以解决:

  1. 确保新表单在“安全”位置打开,只是偏离鼠标光标
  2. 在表单的构造函数运行
  3. 时将鼠标移动到保存位置

    您可以通过'System.Windows.Forms.Cursor.Position'获取并设置当前鼠标屏幕位置。

    尽管在没有用户输入的情况下移动鼠标光标并不总是受到赞赏,但如果在应用程序中一致地完成,那么对我来说这是最可接受的选择。

    这是我倾向于在包含DataGridView的表单的构造函数中使用的代码(在InitializeComponent方法之后)

                Cursor.Position = this.PointToScreen(new Point(this.Width/2, -10));
    

    这会将光标置于标题栏中的表单中心。您可能需要进行一些检查以确保不要将光标移出屏幕。

    我希望这对你有所帮助。

答案 2 :(得分:1)

也许你在加载时正在迭代这些值?尝试让您的应用程序等待或锁定这些操作。