4

我希望默认情况下列使用

AutoSizeMode = DisplayedCells;

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

有任何想法吗?

4

5 回答 5

6

您可以在方便时调用 sub DataGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.DisplayedCells),例如在加载数据之后。不理会该DataGridView.AutoSizeColumnsMode属性,用户仍然可以自己调整列的大小,但他们会有一个舒适的开始。两全其美。

于 2013-12-03T18:21:18.180 回答
2

我认为您无法实现这一点,因为 AutoSizeMode 一旦设置为 DisplayedCells,所有行为都是由设计控制的。但我有这个想法。你应该保持你的专栏(我想 Columns[0] 用于演示目的) AutoSizeMode 固定在DataGridViewAutoSizeColumnMode.None. 您希望将其设置为,DisplayedCells因为您可能希望根据单元格文本长度扩展或折叠列宽。所以我的想法是每次CellBeginEdit开始时,我们将 设置AutoSizeMode为 DisplayedCells 并在CellEndEdit开始时保存 Width (为您自动调整大小),然后将其重置AutoSizeModeNone,然后将列 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 值被代码更改时。

不得不说你想要的有点奇怪,我不太关心列的宽度,用户应该知道如何处理它。

于 2013-06-07T16:29:56.237 回答
1

排:

dataGridView1.AutoResizeRow(2, DataGridViewAutoSizeRowMode.AllCellsExceptHeader);

柱子:

dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
于 2013-06-07T15:08:29.490 回答
0

在我的一个应用程序中,我将 autosize 设置为 displaycells。然后,一旦加载了表单,我就会关闭自动调整大小以允许用户进行调整大小。

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;
    }
于 2013-06-10T13:23:09.783 回答
0

在 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
于 2014-09-25T22:42:50.160 回答