DataGridView - 如何设置列宽?

时间:2010-01-28 11:41:02

标签: .net winforms datagridview controls

我有一个带DataGridView控件的WinForms应用程序。我的控制有五个 列(说“姓名”,“地址”,“电话”等)

我对默认列宽不满意。我希望能更好地控制列外观。我想要的是 是能够做到以下之一:

  • 以百分比
  • 设置每列的宽度
  • 以像素为单位设置每列的宽度
  • 使用其他一些最好的方法(使宽度适合文本等)

请建议 - 使用哪个属性以及如何使用。

13 个答案:

答案 0 :(得分:52)

您可以使用DataGridViewColumn.Width属性执行此操作:

DataGridViewColumn column = dataGridView.Columns[0];
column.Width = 60;

http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcolumn.width.aspx

答案 1 :(得分:25)

还可以尝试以下方法:

DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells

或使用DataGridViewAutoSizeColumnsMode Enum中的其他设置选项

答案 2 :(得分:21)

上述大多数解决方案都假设父DateGridView .AutoSizeMode不等于Fill。如果您将网格的.AutoSizeMode设置为Fill,则需要将每个的AutoSizeMode设置为None,以便修复特定内容列宽(并让其他列填充)。如果您更改列宽并且.AutoSizeMode不是None,我发现了一个关于null对象的奇怪的MS异常。

这有效

chart.AutoSizeMode  = DataGridViewAutoSizeColumnMode.Fill;
... add some columns here
chart.Column[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
chart.Column[i].Width = 60;

这会引发关于设置边框粗细的一些内部对象的null异常。

chart.AutoSizeMode  = DataGridViewAutoSizeColumnMode.Fill;
... add some columns here
 // chart.Column[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
chart.Column[i].Width = 60;

答案 3 :(得分:12)

我知道这是一个老问题,但没有人回答第一部分,以百分比设置宽度。可以使用FillWeight(MSDN)轻松完成。如果其他人搜索到这个答案。

您可以将DataGridAutoSizeColumnMode设置为填充设计器。默认情况下,每列FillWeight为100.然后在代码隐藏,FormLoad事件或将数据绑定到网格之后,您可以简单地:

gridName.Columns[0].FillWeight = 200;
gridName.Columns[1].FillWeight = 50;

等等,无论你想要什么比例的重量。如果你想用数字加起来为100的每一列,对于文字百分比宽度,你也可以这样做。

它提供了一个很好的完整DataGrid,其中标题使用整个空间,即使用户调整窗口大小。在宽屏上看起来不错,4:3,无论如何。

答案 4 :(得分:7)

关于你的最后一颗子弹

  

使宽度适合文字

您可以尝试使用DataGridViewColumn的.AutoSizeMode,将其设置为以下值之一:

None
AllCells
AllCellsExceptHeader
DisplayedCells
DisplayedCellsExceptHeader
ColumnHeader
Fill

MSDN页面上的更多信息

答案 5 :(得分:3)

我建议给所有网格列添加宽度,如下所示:

DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();
col.HeaderText = "phone"            
col.Width = 120;
col.DataPropertyName = (if you use a datasource)
thegrid.Columns.Add(col);    

并且对于主要(或最长)列(让我们说地址)执行此操作:

col = new DataGridViewTextBoxColumn();
col.HeaderText = "address";
col.Width = 120;

棘手的部分

col.MinimumWidth = 120;
col.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

棘手的部分

col.DataPropertyName = (same as above)
thegrid.Columns.Add(col);

通过这种方式,如果您拉伸表单(并且网格在其容器中“已填充”)主列(在本例中为地址列)将占用所有可用空间,但它永远不会小于col。 MinimumWidth,因此它是唯一一个调整大小的。

我使用它,当我有一个网格,其最后一列用于显示图像(如图标细节或图标删除..),它没有标题,它必须始终是最小的一个。

答案 6 :(得分:2)

public static void ArrangeGrid(DataGridView Grid)
{ 
    int twidth=0;
    if (Grid.Rows.Count > 0)
    {
        twidth = (Grid.Width * Grid.Columns.Count) / 100;
        for (int i = 0; i < Grid.Columns.Count; i++)
            {
            Grid.Columns[i].Width = twidth;
            }

    }
}

答案 7 :(得分:2)

使用:

yourdataView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);

答案 8 :(得分:1)

我不想以编程方式执行此操作,您可以操作列宽属性,该属性位于Columns属性中。一旦打开列编辑属性,您可以选择要编辑的列,向下滚动到布局绑定列属性的一部分并更改宽度。

答案 9 :(得分:1)

DataGridView1.Columns.Item("Adress").Width = 60
    DataGridView1.Columns.Item("Phone").Width = 30
    DataGridView1.Columns.Item("Name").Width = 40
    DataGridView1.Columns.Item("Etc.").Width = 30

答案 10 :(得分:0)

您可以将所有列和行的默认宽度和高度设置为仅使用一个循环。

    // DataGridView Name= dgvMachineStatus

   foreach (DataGridViewColumn column in dgvMachineStatus.Columns)
        {
            column.Width = 155;
        }

   foreach (DataGridViewRow row in dgvMachineStatus.Rows)
        {
            row.Height = 45;
        }

答案 11 :(得分:0)

使用Columns属性并将“自动调整大小”模式设置为“所有单元格”,“可调整大小”为“真”,“冻结”为False,并显示为“真”。

该列将根据插入的数据自动调整大小。

答案 12 :(得分:-3)

或者您只需转到表单,当您调用要显示的数据时,您可以设置属性 喜欢  datagridview1.columns(0).width = 150  datagridview1.columns(1).width = 150  datagridview1.columns(2).width = 150 enter code here

这么简单对我来说工作很好Bro