拉伸列以填充DataGrid的所有可用空间

16

是否可以拉伸列或最后一列以填满数据网格的所有可用空间?

<DataGrid Grid.Row="0" AutoGenerateColumns="True" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Name="dataGrid1"   ItemsSource="{Binding Customers}" />

我的列是自动生成的。

5个回答

19

是的,我认为你正在寻找 AutoSizeMode 属性。

int n = grid.Columns.Count;
grid.Columns[n].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

编辑:尝试将宽度设置为 "*",如下所示。如果您的列是自动生成的,则必须在代码中执行此操作。

<DataGrid>
  <DataGrid.Columns>
    <DataGridTextColumn Width="Auto" />
    <DataGridTextColumn Width="*" />
  </DataGrid.Columns>
</DataGrid>

6
你的回答与WinForms有关吗? - Night Walker
是的,但是WPF中的DataGrid与Winforms中的DataGridView完全相同。请参阅此链接:http://msdn.microsoft.com/en-us/library/ms750559.aspx - user807566
9
它们不完全相同,特别是 DataGrid 类中不存在 AutoSizeMode 属性。 - julio.g
3
"<DataGridTextColumn Width="*" /> 对我来说可以正常工作,谢谢。" - Francois Borgies
3
为什么这是被选中的答案?它为什么有这么多的赞? - Krythic

6

由于我在这个主题上找到的大多数答案都涉及XAML,因此这里提供一个C#的解决方案,以将数据网格中的所有列设置为填充可用空间。

    foreach (var column in this.datagrid.Columns)
    {
        column.Width = new DataGridLength(1, DataGridLengthUnitType.Star);
    }

0

0

DataGrid.Columns[x].Width = DataGridLength.Auto;

数据表格.列[x].宽度 = 数据表格长度.自动;


0
如果您想将所有列的宽度设置为自动,除了最后一列应填充剩余空间,请尝试以下代码:
for (int i = 0; i < grid.Columns.Count; i++)
{
    if (i == grid.Columns.Count - 1)
    {
        grid.Columns[i].Width = new DataGridLength(1, DataGridLengthUnitType.Star);
    }
    else
    {
        grid.Columns[i].Width = new DataGridLength(1, DataGridLengthUnitType.Auto); 
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接