[英]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.