System.InvalidOperationException:在调整自动填充列时无法执行此操作
我在winform应用程序中有DataGridView并设置
this.dgvDte.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
当我的项目运行一段时间打开时,但并不总是让我犯这个错误
“System.InvalidOperationException:在调整自动填充列时无法执行此操作”
任何身体都可以帮助我发生什么事情?
也许你在加载时迭代值? 尝试让您的应用程序等待或锁定这些操作。
this.dataGridView1.ColumnHeadersHeightSizeMode
设置为AutoSize
。
在创建DataGridView时,如果鼠标突然位于Column标头所在的位置,DataGridView将尝试处理CellEnter
事件,并尝试调整列或其他内容的大小,但此时DataGridView仍在创建。
结果,抛出了InvalidOperation
。
解决方法如下:
在客户提供的项目GridWrapper.cs
文件中,在InitializeComponent();
之后放置以下行InitializeComponent();
this.dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
GridWrapper_Load
下行放在GridWrapper_Load
方法中:
this.dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
许多客户发现在微软和社区其他成员可以推荐实现您的目标行为的论坛中讨论这样的问题很有用。
在链接中回答
正如在MS论坛( MS )上报告的那样,DataGridView抛出了exception。 据我所知,当初始化控件时鼠标光标位于datagridview clientrectangle内时会发生这种情况。 MS告诉我们他们允许(“按设计”)列resize事件和单元格输入事件同时强制抛出exception。 建议的解决方法并没有解决我的问题。
由于MS似乎没有兴趣解决这个问题,我发现,对我来说,有两种解决方案可行:
- 确保新表单在“安全”位置打开,只是偏离鼠标光标
- 在窗体的构造函数运行时将鼠标移动到保存位置
您可以通过’System.Windows.Forms.Cursor.Position’获取并设置当前鼠标屏幕位置。
尽管在没有用户输入的情况下移动鼠标光标并不总是受到欢迎,但如果在应用程序中一致地完成,则对我来说这是最可接受的选择。
这是我倾向于在包含DataGridView的表单的构造函数中使用的代码(在InitializeComponent方法之后)
Cursor.Position = this.PointToScreen(new Point(this.Width/2, -10));
这会将光标置于标题栏中的表单中心。 您可能需要进行一些检查以确保不要将光标移出屏幕。
我希望这可能对你有所帮助。