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