2012-11-23 105 views
9

我試圖自動調整行的高度,我發現它非常具有挑戰性。Datagridview的行自動調整大小

我已經設置該屬性:

DataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells. 

我已經使用這個另一種方法也使:

DataGridView.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders) 

而且還逐行,通過使用這樣的:

DataGridView.AutoResizeRow(i, DataGridViewAutoSizeRowMode.AllCells) 

而且甚至硬編碼行的高度到一個很大的值,它也沒有工作!所有行都顯示其默認高度。

這些都沒有工作。我沒有選擇。

datagridview中的大部分行不需要調整大小。但其中一個填充的值如下:

「a」+「\ n」+ b +「\ n」+「c」+「\ n」+「d」+「\ n」+「 e「

我的意思是,短值但不同的行。我必須用不同的方式展示他們,不能一起展示他們。 但datagridview只顯示第一個,其他所有的都隱藏起來,因爲該行沒有自動調整大小。

任何其他方式的想法。

回答

3

我找到了解決這個問題的辦法。 而不是使用網格或行的autosize屬性,我應該使用wrapmode應用於所有網格的單元格。

DataGridView.DefaultCellStyle.WrapMode = DataGridViewTriState.True

這適用於所有的細胞和它的作品。

+0

很高興你找到了解決方案(我推測你已經設置了wrapmode並且看到了多行溢出網格單元格區域)。我將離開我的答案,因爲對於其他問題是正確的(如果更新任何單元格增加數據長度,調整大小將不會自動觸發)。 –

+2

哦 - 並將其標記爲答案,以便將問題從無人答覆的列表中刪除。 –

5

您需要在之後調用調整大小方法的數據已更改。來自DataGridView.AutoResizeRows()上的MSDN文章:

行高僅在每個方法調用中調整一次;如果 行的內容稍後發生更改,則行將不會自動調整 。

這意味着您需要在第一次和任何後續的網格加載之後調用方法。如果您在父表單的控制器中調用此代碼,數據綁定尚未發生,因此數據不在那裏。

對於使用DataBindingComplete事件的首次加載:

dataGridView1.DataBindingComplete += new 
    DataGridViewBindingCompleteEventHandler(dataGridView1_DataBindingComplete); 

void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) 
{ 
    dataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells); 
} 

爲隨後的更新細胞,你需要自己找到最好的地方。

+0

你當前的方法不工作的原因很可能是你的代碼在窗體構造函數或onload事件中。 –

+0

不,我確實在gridsource被設置爲datagridview之後執行它。它已經填充。這是我做的最後一件事。 – monican

+0

@ user1062568你什麼時候做的?在什麼事件處理程序?即使您在源設置後執行此操作,但這還不夠,您必須在數據綁定完成後執行此操作。例如,如果您設置了源,然後在窗體構造函數中調用全部大小,則這不會更改高度。 –