9

我的 Winform 应用程序中有 DataGridView 并设置

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

当运行我的项目时,有时会打开,但并不总是让我犯这个错误

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

任何机构都可以帮助我发生了什么?

4

3 回答 3

19

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 和社区的其他成员可以在这些论坛中推荐实现目标行为的方法。

链接中回答

于 2014-10-29T10:35:25.177 回答
4

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

由于 MS 似乎对解决此问题不感兴趣,因此我发现对我来说有两种解决方案:

  1. 确保新表单在“安全”位置打开,刚好在鼠标光标之外
  2. 在窗体的构造函数运行时将鼠标光标移动到保存位置

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

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

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

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

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

我希望这可以帮助你一点。

于 2013-10-23T23:58:08.980 回答
1

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

于 2013-02-18T10:28:44.220 回答