C1FlexGrid for WPF过滤:1.自定义过滤下拉框的值

C1FlexGrid在WPF平台支持过滤,默认的过滤会在ColumnHeader显示过滤下拉框,用户可以在下拉框选择过滤的条件以及过滤的值,然后通过应用实现过滤。本文就来介绍如何自定义过滤下拉框里的值。

发布于 2016/08/29 00:00

ComponentOne Enterprise

C1FlexGrid在WPF平台支持过滤,默认的过滤会在ColumnHeader显示过滤下拉框,用户可以在下拉框选择过滤的条件以及过滤的值,然后通过应用实现过滤。

本文就来介绍如何自定义过滤下拉框里的值。

假设某列的值是布尔类型,里面显示的是True/False。那么在过滤的下拉框将出现True/False的选项,可以供用户选择。但是目前我们需要自定义过滤,在下拉框显示的是有效/无效,那么就需要自定义下拉框。

自定义的步骤如下:

1.定义Converter

首先需要自定义Converter,将原本的True/False的值转成有效/无效。

代码参考:
public class CustomConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)

        {
            string val = value.ToString();
            if (val.Equals("False"))
               return "无效";

            else if (val.Equals("True"))
                return "有效";

            else
               return val;
       }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
       {
            throw new NotImplementedException();
        }
}

 

2.自定义CheckBox下拉框模板

定义一个模板,将原本的值转成需求的值。

代码参考:
  <local:CustomConverter x:Key="Converter" />
            <DataTemplate x:Key="checkBoxTemplate">
                <TextBlock Text="{Binding Path=., Converter={StaticResource Converter }}" />
            </DataTemplate>

3.实现自己的FilterEditor

从ColumnFilterEditor接口继承,实现自己的FilterEditor,其中将原本的下拉框部分替换成设计好的Checkbox

代码参考:

public class MyColumnFilterEditor : ColumnFilterEditor
       {
              ListBox _lbValues;
              public override void OnApplyTemplate()
              {
                  base.OnApplyTemplate();
                 _lbValues = GetTemplateChild("_lbValues") as ListBox;
               }
 

        protected override void AddValueCheckBox(object content, bool isChecked)
        {
            base.AddValueCheckBox(content, isChecked);
            var checkBox = _lbValues.Items[_lbValues.Items.Count - 1] as CheckBox;
            checkBox.ContentTemplate = FindResource("checkBoxTemplate") as DataTemplate;
        }

}

最后将之前设计好的自定义Editor设置给flexgrid的列。

代码参考:

C1FlexGrid grid = sender as C1FlexGrid;
var filter = C1FlexGridFilterService.GetFlexGridFilter(grid);
filter.Editor = new MyColumnFilterEditor();

 

这样子,就可以将原本过滤下拉框的值进行自定义,效果如图:

image

本文的源代码请下载:

 

更多资源

C1FlexGrid在线英文产品文档地址:

http://helpcentral.componentone.com/nethelp/c1wpfchart/#!Documents/componentonechartforwpf.htm

如果你对C1FlexGrid感兴趣,请到我们的官网下载最新版本:/download/?pid=6

如果你有疑问,可以到GCDN论坛获得技术支持:http://gcdn.grapecity.com.cn/showforum-138.html

ComponentOne Enterprise | 下载试用

ComponentOne 是一套专注于企业 .NET开发、支持 .NET Core 平台,并完美集成于 Visual Studio 的第三方控件集,包含 300 多种 .NET开发控件,提供表格数据管理、数据可视化、报表和文档、日程安排、输入和编辑、导航和布局、系统提升工具等七大功能,被誉为“.NET开发的‘瑞士军刀’”。

ComponentOne 为您提供专业的产品咨询服务,并由技术支持工程师为您1对1解答。>> 发帖提问

相关产品
推荐相关案例
关注微信
葡萄城社区二维码

关注“葡萄城社区”

加微信获取技术资讯

加微信获取技术资讯

想了解更多信息,请联系我们, 随时掌握技术资源和产品动态