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

Mud Blazor DataGrid日期列筛选及模板列筛选问题咨询

问题1:DataGrid简单筛选模式下,日期列筛选器的DatePicker配置

要关闭DatePicker的工具栏并设置为可编辑,直接通过自定义列的FilterTemplate来修改DatePicker属性即可:

  • 关闭工具栏:设置ShowButtonSpinner="False",隐藏默认的 spinner 工具栏
  • 开启可编辑:设置IsEditable="True"和IsReadOnly="False",允许手动输入日期

XAML示例(手动定义列)

<DataGridTemplateColumn Header="日期列" CanUserFilter="True">
    <DataGridTemplateColumn.FilterTemplate>
        <ControlTemplate>
            <DatePicker IsEditable="True" 
                        IsReadOnly="False" 
                        ShowButtonSpinner="False"
                        SelectedDate="{Binding FilterValue, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"/>
        </ControlTemplate>
    </DataGridTemplateColumn.FilterTemplate>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding YourDateProperty, StringFormat='yyyy-MM-dd HH:mm:ss'}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

代码示例(自动生成列场景)

如果是自动生成的日期列,可在AutoGeneratingColumn事件中动态配置:

private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    if (e.PropertyType == typeof(DateTime) || e.PropertyType == typeof(DateTime?))
    {
        var textColumn = e.Column as DataGridTextColumn;
        if (textColumn != null)
        {
            var filterTemplate = new ControlTemplate();
            var datePickerFactory = new FrameworkElementFactory(typeof(DatePicker));
            
            datePickerFactory.SetValue(DatePicker.IsEditableProperty, true);
            datePickerFactory.SetValue(DatePicker.IsReadOnlyProperty, false);
            datePickerFactory.SetValue(DatePicker.ShowButtonSpinnerProperty, false);
            datePickerFactory.SetBinding(DatePicker.SelectedDateProperty, 
                new Binding("FilterValue") 
                { 
                    RelativeSource = new RelativeSource(RelativeSourceMode.TemplatedParent), 
                    Mode = BindingMode.TwoWay 
                });
            
            filterTemplate.VisualTree = datePickerFactory;
            textColumn.FilterTemplate = filterTemplate;
        }
    }
}

问题2:DataGrid简单筛选模式下,模板列筛选器不显示的解决办法

默认情况下DataGridTemplateColumn不会自动生成筛选器,需要手动开启筛选权限并自定义筛选模板:

  1. 给模板列设置CanUserFilter="True",开启筛选功能
  2. 定义FilterTemplate,添加筛选控件并绑定到列的FilterValue属性,让筛选输入能关联到DataGrid的筛选逻辑

XAML示例(字符串类型模板列)

<DataGridTemplateColumn Header="自定义模板列" CanUserFilter="True">
    <DataGridTemplateColumn.FilterTemplate>
        <ControlTemplate>
            <TextBox Text="{Binding FilterValue, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"
                     Margin="3" />
        </ControlTemplate>
    </DataGridTemplateColumn.FilterTemplate>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding YourCustomProperty}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

如果需要复杂筛选逻辑,可在绑定FilterValue后,通过DataGrid的Filter事件自定义过滤规则,确保筛选输入能正确过滤数据。


内容的提问来源于stack exchange,提问作者blue pink

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 19:49:57