2012-08-15 18 views
2

我有一個自定義控件,必要時顯示一個DataGridView彈出窗口,當一個按鈕被點擊。我想調整彈出窗口大小到DataGridView列的大小。 DataGridView創建時我設置了AutoSize模式。DataGridView不自動化欄直到顯示

dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; 
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells; 

在計算總列大小之前,我還要調用以下方法。

public void AutoResize() 
{ 
    dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells); 
    dataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells); 
    dataGridView1.Refresh(); 
} 

第一次顯示彈出窗口時,它沒有被正確調整大小。據我所知,這是因爲直到dataGridView控件顯示一次後,纔會發生列的AutoSize。

這是執行的順序。

CreateCustomControl - > CreateDataGridView(有數據) - > AddToCustomControl - > CallAutoResize - > ShowCustomControl(帶的DataGridView)

一個簡單的解決方案是對我顯示後它以調整控制。我仍然想知道爲什麼AutoResize不會在控件顯示之前發生?

非常感謝您的幫助。

回答

0

會爲你

dataGridView1.DataSource = your DataSource would be assigned here; 
dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; 
dataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; 
dataGridView1.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; 

for (int i = 0; i < dataGridView1.Columns.Count; i++) 
{ 
    int colw = grd.Columns[i].Width; 
    dataGridView1.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None; 
    dataGridView1.Columns[i].Width = colw; 
} 
這個解決方案工作