You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Syncfusion SfDataGrid时ColumnSizer设为Auto的列宽异常问题

WPF中Syncfusion SfDataGrid列宽自动适配异常问题

我在WPF应用中使用Syncfusion SfDataGrid,设置ColumnSizer="Auto"后,预期所有列会自动适配内容宽度,但实际ARTICLE和LIBELLE列的内容右侧被截断,效果如下:

内容截断的SfDataGrid

我的XAML代码如下:

<sc:SfDataGrid x:Name="Ventes_Det_Dt"
               AutoGenerateColumns="False"
               AllowFiltering="False"
               Background="White"
               ColumnSizer="Auto"
               Foreground="Black" Margin="5" Grid.Column="1">
    <sc:SfDataGrid.Columns>
        <sc:GridTextColumn HeaderText="ARTICLE" MappingName="art"/>
        <sc:GridTextColumn HeaderText="LIBELLE" MappingName="lib"/>
        <sc:GridTextColumn HeaderText="QTE" MappingName="qte"/>
        <sc:GridTextColumn HeaderText="POIDS NET" MappingName="pds"/>
    </sc:SfDataGrid.Columns>
</sc:SfDataGrid>

解决方法:

  • 适配所有行内容:默认AutoFitMode仅计算可见行宽度,改为AllRows会遍历所有行计算最大内容宽度,在SfDataGrid中添加属性:

    AutoFitMode="AllRows"
    
  • 设置最小列宽:给截断的列手动指定MinWidth,避免宽度被过度压缩:

    <sc:GridTextColumn HeaderText="ARTICLE" MappingName="art" MinWidth="180"/>
    <sc:GridTextColumn HeaderText="LIBELLE" MappingName="lib" MinWidth="250"/>
    
  • 确保内容单行显示:若内容包含自动换行,会导致宽度计算偏差,给列添加TextWrapping="NoWrap":

    <sc:GridTextColumn HeaderText="ARTICLE" MappingName="art" TextWrapping="NoWrap"/>
    
  • 数据加载后手动触发适配:如果数据是异步加载,在数据绑定完成后调用代码触发列宽适配:

    Ventes_Det_Dt.Dispatcher.BeginInvoke(new Action(() => 
    {
        Ventes_Det_Dt.Columns.AutoFitAllColumns();
    }));
    

内容的提问来源于stack exchange,提问作者Jean François Collombet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 20:30:41