[英]c# datagridview column autosizemode
我希望默認情況下列使用
AutoSizeMode = DisplayedCells;
但我希望也可以調整列的大小,但DisplayedCells
類型不允許調整大小..
有任何想法嗎?
只要方便,您可以調用子DataGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.DisplayedCells)
,例如在加載數據之后。 保留DataGridView.AutoSizeColumnsMode
屬性,用戶仍然可以自己調整列的大小,但它們將有一個舒適的開始。 兩全其美。
行:
dataGridView1.AutoResizeRow(2, DataGridViewAutoSizeRowMode.AllCellsExceptHeader);
柱:
dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
我不認為你可以實現這一點,因為AutoSizeMode一旦設置為DisplayedCells,所有行為都由設計控制。 但我有這個想法。 你應該保留你的列(我認為Columns [0]用於演示目的)AutoSizeMode固定在DataGridViewAutoSizeColumnMode.None
。 您希望將其設置為DisplayedCells
因為您可能希望根據單元格文本長度擴展或折疊列寬。 所以我的想法是每次CellBeginEdit
啟動時,我們將AutoSizeMode
設置為DisplayedCells,當CellEndEdit
啟動時,我們保存寬度(為您自動調整),然后將AutoSizeMode
為None
,然后將列Width分配給該保存的值。 這是我的代碼:
//First before loading data
private void form_Load(object sender, EventArgs e){
dataGridView.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
//Fill your dataGridView here
//.........
//.........
int w = dataGridView.Columns[0].Width;
//reset to None
dataGridView.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
dataGridView.Columns[0].Width = w;
}
//Now for CellBeginEdit and CellEndEdit
private void dataGridView_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
if(e.ColumnIndex == 0) //because I suppose the interested column here is Columns[0]
dataGridView.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
}
private void dataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if(e.ColumnIndex == 0){
int w = dataGridView.Columns[0].Width;
dataGridView.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
dataGridView.Columns[0].Width = w;
}
}
我測試了代碼,它似乎工作正常,有一種情況它不會工作,因為我們不為這種情況添加代碼,即通過代碼更改Cell值。
我不得不說你想要的有點奇怪,我不太關心列的寬度,用戶應該知道如何處理它。
在我的一個應用程序中,我將自動調整設置為顯示的單元格。 然后,一旦加載表單,我關閉自動調整大小,以允許用戶進行大小調整。
private void Form1_Load(object sender, EventArgs e)
{
// Designer has autosize set to displayedcells.
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None; // Turn off autosize
dataGridView1.AllowUserToResizeRows = true; // Turn on letting user size columns
dataGridView1.AllowUserToOrderColumns = true;
}
在Visual Studio 2008(和VB.net)中唯一對我有用的是:
For i As Integer = 0 To grdList2.Columns.Count - 1
If i <> (grdList2.Columns.Count - 1) Then
grdList2.Columns(i).AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
Else
grdList2.Columns(i).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
End If
Next
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.