Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#datagridview列自动izeMode_C#_Winforms_Datagridview_Autoresize_Datagridtemplatecolumn - Fatal编程技术网

c#datagridview列自动izeMode

c#datagridview列自动izeMode,c#,winforms,datagridview,autoresize,datagridtemplatecolumn,C#,Winforms,Datagridview,Autoresize,Datagridtemplatecolumn,我希望默认情况下,列使用 AutoSizeMode = DisplayedCells; 但是我也希望能够调整列的大小,但是DisplayedCellstype不允许调整大小 有什么想法吗?行: dataGridView1.AutoResizeRow(2, DataGridViewAutoSizeRowMode.AllCellsExceptHeader); dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMod

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

AutoSizeMode = DisplayedCells;
但是我也希望能够调整列的大小,但是
DisplayedCells
type不允许调整大小

有什么想法吗?

行:

dataGridView1.AutoResizeRow(2, DataGridViewAutoSizeRowMode.AllCellsExceptHeader);
dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
列:

dataGridView1.AutoResizeRow(2, DataGridViewAutoSizeRowMode.AllCellsExceptHeader);
dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;

我认为您无法实现这一点,因为AutoSizeMode一旦设置为DisplayedCells,所有行为都由设计控制。但我有这个想法。您应该将您的列(我假设列[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;
        }
    }
我对代码进行了测试,它似乎工作正常,但有一种情况是它不工作,因为我们没有为这种情况添加代码,即当单元格值被代码更改时


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

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

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

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

在Visual Studio 2008(和VB.net)中,唯一对我有用的是:

对于i As Integer=0到grdList2.Columns.Count-1
如果i(grdList2.Columns.Count-1),则
grdList2.Columns(i).AutoSizeMode=DataGridViewAutoSizeColumnMode.AllCells
其他的
grdList2.Columns(i).AutoSizeMode=DataGridViewAutoSizeColumnMode.Fill
如果结束
下一个

谢谢@Gorfi,但与allcells相同,无法编辑sizeApproach对我有效。唯一真正的问题是在调用
AutoResizeColumns(int columnIndex,DataGridViewAutoSizeColumnsMode DataGridViewAutoSizeColumnsMode)之前,需要在
DataGridView
上调用
Refresh()