c# datagridview列自动大小模式

本文关键字:模式 datagridview | 更新日期: 2023-09-27 18:17:36

我希望在默认情况下列使用

AutoSizeMode = DisplayedCells;

,但我也希望有可能调整列的大小,但DisplayedCells类型不允许调整大小…

任何想法?

c# datagridview列自动大小模式

您可以在方便的时候调用子DataGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.DisplayedCells),例如在加载完数据之后。单独离开DataGridView.AutoSizeColumnsMode属性,用户仍然可以调整列本身的大小,但他们会有一个舒适的开始。两全其美

我不认为你可以实现,因为AutoSizeMode一旦设置为DisplayedCells所有的行为是由设计控制。但我有个想法。您应该保持您的列(我假设Columns[0]用于演示目的)AutoSizeMode固定在DataGridViewAutoSizeColumnMode.None。您希望将其设置为DisplayedCells,因为您可能希望列宽度根据单元格文本长度展开或折叠。所以我的想法是每次CellBeginEdit开始时,我们将AutoSizeMode设置为DisplayedCells,当CellEndEdit开始时,我们保存宽度(为您自动调整大小),然后将AutoSizeMode重置为None,然后将列宽度分配给保存的值。下面是我的代码:

//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;
        }
    }

我测试了代码,它似乎工作正常,有一种情况,它不会工作,因为我们没有为这种情况添加代码,这是当单元格值被代码改变。

我不得不说你的想法有点奇怪,我不太关心列的宽度,用户应该知道怎么做

Row:

dataGridView1.AutoResizeRow(2, DataGridViewAutoSizeRowMode.AllCellsExceptHeader);

专栏:

dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;

在我的一个应用程序中,我将自动大小设置为显示单元格。然后,一旦表单被加载,我关闭自动大小,以允许用户进行大小调整。

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