2011-10-03 29 views
2

我有一個程序,我使用C#在Visual Studio 2010.NET VS2010的DataGridView AutoSizeColumnsMode設置禁止用戶調整

我填充的信息和一個DataGridView對.NET 3.5開發一個奇怪的問題我想根據標題調整數據網格列的大小,但是如果數據長度超過標題值的長度,也允許用戶手動調整列的大小。

所以我改變了我的DataGridView.AutoSizeColumnsMode = ColumnHeader。 DataGridView現在根據標題自動調整列的大小,但突然間我發現我無法用鼠標手動調整列大小,即使我的DataGridView.AllowUserToResizeColumns屬性爲true。

我的問題是我怎麼能自動調整我的數據網格視圖列的大小,同時仍然允許用戶調整列的大小?

+0

哦,當然,你問它的尺寸列中自動。也許你想打開它並退出?也許你正在尋找完整? –

+0

我正在使用大型數據集,因此Full使用速度太慢 – David

回答

2

here解決方案coverted到C#和測試:

for (int i = 0; i < dataGridView1.Columns.Count; i++) 
{ 
    // Size the column header based on the ColumnHeader mode 
    dataGridView1.Columns[i].AutoSizeMode = 
     DataGridViewAutoSizeColumnMode.ColumnHeader; 
    // Store autosized width 
    int colw = dataGridView1.Columns[i].HeaderCell.PreferredSize.Width; 
    // Change back to Resize mode 
    dataGridView1.Columns[i].AutoSizeMode = 
     DataGridViewAutoSizeColumnMode.None; 
    // Set width to calculated above 
    dataGridView1.Columns[i].Width = colw; 
} 

剛剛發現一個更好的解決方案,從MSDN。在DataGridView顯示之前,使用AutoResizeColumn函數。例如:

void Form1_Load(object sender, EventArgs e) 
{ 
    for (int i = 0; i < dataGridView1.Columns.Count; i++) 
    { 
     dataGridView1.AutoResizeColumn(
     i, DataGridViewAutoSizeColumnMode.ColumnHeader); 
    } 
} 
+0

有限的成功。而不是使用datagridview1.columns [i] .headercell.preferr ...我做了列[i] .width。 – David

+0

很好,這讓我很頭疼 – heisenberg

0
detailsDataGridView.AutoSizeColumnsMode = 
     DataGridViewAutoSizeColumnsMode.AllCells doesn't work? 

發現它here

如果不這樣做,您可以隨時手動處理它,只要單元格的數據更改爲等於最大單元格時調整列大小。

+0

我只想根據列標題調整列的大小,因爲我正在處理大型數據集。如果我試圖通過內容調整數據大小,程序似乎會暫停,而它會遍歷每一行,以找到最大列寬 – David

+0

啊,在我回答之前可以使用該信息。 = \ – Yatrix

2

我做的方式,更簡單:

首先填寫您的網格與所需的數據。 然後,設置以下屬性(也可以設置這些當然在設計師)

datagridResult.DataSource = YourDataSourceHere 
datagridResult.AllowUserToOrderColumns = true; 
datagridResult.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells; 

現在,添加以下代碼,在事件處理程序的形式是「所示」:

private void MainForm_Shown(object sender, EventArgs e) 
    { 
     Application.DoEvents(); 
     datagridResult.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None; 
    } 

這是全部:)

3

我在同一個問題上(或多或少)絞盡腦汁,我無法弄清楚。

我確信下列屬性分別設置

AllowUserToResizeColumns = True 
AutoSizeColumnsMode = None 
在我的代碼

然後,我設置以下後,我充滿了我的網格數據:

dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells) 

的OP顯然會改用:

dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.ColumnHeader) 

這應該做到了,所以你自動調整大小的列一次,但其他如果AutoSizeColumnsMode設置爲None,那麼用戶仍然有控制權。

...我的問題是,我忘了列本身也需要考慮到的屬性。我已經建立大多數列有:

AutoSizeMode = AllCells 

這是我的問題的根源...所以我將它們設置爲

AutoSizeMode = NotSet 

,一切都理所應當的。

-1

的代碼應該是這樣的,希望這將有所幫助

datagridView1.Columns[columnindex].AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;