2013-02-18 75 views
6

我的DataGridView在我的WinForm應用程序和設置System.InvalidOperationException:當自動填充柱被調整

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

當運行我的項目的開放是形式 一些時間,但不是不能進行此操作總是讓我這個犯錯

「System.InvalidOperationException:無法執行 此操作而自動填充柱被調整」

任何機構都可以幫助我發生什麼?

回答

0

也許你正在迭代值,而他們正在加載?嘗試讓您的應用程序等待或鎖定這些操作。

+0

請問您能否提供一些細節? – budaancamanyak 2014-08-25 10:00:53

3

正如MS論壇(by MS)所報道的那樣,DataGridView引發了異常。據我所知,當控件初始化時,鼠標光標位於datagridview clientrectangle中時會發生這種情況。 MS告訴我們他們允許(「按設計」)列調整事件和單元格輸入事件,同時強制拋出異常。建議的解決方法不能解決我的問題。

由於MS似乎不是有意解決這個問題,我已經找到了,對我來說,兩種解決方案的工作:

  1. 確保新的形式打開了一個「安全」的位置,剛出來的鼠標光標的方式
  2. 而形式的構造函數運行

的mousecursor移動到一個保存位置你可以通過「System.Windows.Forms.Cursor.Position」設置鼠標當前的屏幕位置。

儘管在沒有用戶輸入的情況下移動鼠標光標並不總是值得讚賞,但如果在應用程序中一致地完成,它對我來說是最可接受的選項。

這是我傾向於在包含一個DataGridView(InitializeComponent方法之後)的形式的構造使用

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

這使中心在標題欄的表格上的光標的代碼。您可能需要進行一些檢查,以確保不會將光標移出屏幕。

我希望這可以幫助你一點。

13

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

+0

這應該是被接受的答案;關於發生的事情的細節和解釋。 – sparkyShorts 2016-08-22 20:02:05

+0

另請參閱http://stackoverflow.com/questions/34344499/invalidoperationexception-this-operation-cannot-be-performed-while-an-auto-fill – 2016-08-30 10:40:01