我在winform应用程序中有DataGridView并设置
this.dgvDte.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
运行我的项目时打开该表单 有时但并不总是让我犯这个错误
“System.InvalidOperationException:无法执行此操作 正在调整自动填充列的大小“
任何身体都可以帮助我实现它的发生吗?
答案 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似乎没有兴趣解决这个问题,我发现,对我来说,有两个解决方案可以解决:
您可以通过'System.Windows.Forms.Cursor.Position'获取并设置当前鼠标屏幕位置。
尽管在没有用户输入的情况下移动鼠标光标并不总是受到赞赏,但如果在应用程序中一致地完成,那么对我来说这是最可接受的选择。
这是我倾向于在包含DataGridView的表单的构造函数中使用的代码(在InitializeComponent方法之后)
Cursor.Position = this.PointToScreen(new Point(this.Width/2, -10));
这会将光标置于标题栏中的表单中心。您可能需要进行一些检查以确保不要将光标移出屏幕。
我希望这对你有所帮助。
答案 2 :(得分:1)
也许你在加载时正在迭代这些值?尝试让您的应用程序等待或锁定这些操作。