【问题标题】:Programmatically change DataGrid column width to longest size of cell content以编程方式将 DataGrid 列宽更改为单元格内容的最长大小
【发布时间】:2017-09-22 02:20:06
【问题描述】:

我正在寻找示例如何以编程方式将 DataGrid 列宽更改为自动,同时忽略列标题中的文本(如果标题内容长于列单元格中最长的内容)。

【问题讨论】:

  • 您在 Windows 窗体中使用 DataGridView 吗?
  • Set DataGridColum Width="Auto" 不需要在代码隐藏中设置。根据标题大小调整大小

标签: c# wpf code-behind


【解决方案1】:

尝试使用属性sizeToCells(来自 MSDN)

像这样的单列:

grid.Columns[0].Width = new DataGridLength(1, DataGridLengthUnitType.SizeToCells); 

【讨论】:

    【解决方案2】:

    而不是像这样在 XAML 标记中设置列的 Header 属性:

    <DataGrid x:Name="dg">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding}" Header="some very long header some very long header  some very long header" />
            <DataGridTextColumn Binding="{Binding}" Header="short" />
        </DataGrid.Columns>
    </DataGrid>
    

    ..一旦加载了DataGrid,您就可以通过编程方式设置它:

    <DataGrid x:Name="dg" Loaded="dg_Loaded">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding}" />
            <DataGridTextColumn Binding="{Binding}" Header="short" />
        </DataGrid.Columns>
    </DataGrid>
    

    private void dg_Loaded(object sender, RoutedEventArgs e)
    {
        dg.Columns[0].Width = new DataGridLength(dg.Columns[0].ActualWidth);
        dg.Columns[0].Header = "some very long header some very long header  some very long header";
    }
    

    那么列的宽度将仅基于单元格内容,而不取决于标题的长度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多