zxc9089 发表于 2018-1-30 09:50:22

FlexGrid列筛选功能问题

C1FlexGridFilterService.SetFlexGridFilter(grid, filter);
用这种方式可以让FlexGrid在列头进行筛选,有没有什么办法能根据FlexGrid外部文本框数据实现同样效果的实现?

比如外部文本框输入内容,列表中只显示某列和它匹配的数据,但是列表绑定的数据源不发生变动的?

JeffryLI 发表于 2018-1-30 10:35:14

您好,flexgrid的自定义的过滤如下:
\Documents\ComponentOne Samples\WPF\C1.WPF.FlexGrid\CS\ColumnFilter
Documents\ComponentOne Samples\WPF\C1.WPF.FlexGrid\CS\CollectionViewFilter
请参照,希望能帮到您。

zxc9089 发表于 2018-1-30 12:11:19

那这个filter在列表上的下拉箭头能隐藏吗? 只需要外部控制

zxc9089 发表于 2018-1-30 12:13:04

或者只指定某几列才能筛选?

JeffryLI 发表于 2018-1-30 15:07:18

zxc9089 发表于 2018-1-30 12:13
或者只指定某几列才能筛选?

您好,每一列的过滤都是可以设置的,可以后台制定过滤条件,每一列的Column下有一个allowFilter的属性,来设置。希望能帮到您

zxc9089 发表于 2018-1-30 17:43:36

http://gcdn.gcpowertools.com.cn/forum.php?mod=image&aid=37446&size=300x300&key=6c700963a926a052&nocache=yes&type=fixnone

没有这个选项

JeffryLI 发表于 2018-1-30 18:08:03

zxc9089 发表于 2018-1-30 17:43
没有这个选项


不好意思,AllowFilter是Winform平台下的,关于WPF具体定义哪一列请参照下面代码:
// 创建C1FlexGrid
var flex = new C1FlexGrid();

// 在Grid上启用过滤
var gridFilter = new C1FlexGridFilter(flex);

// 在图像类型的列上禁用过滤
var columnFilter = gridFilter.GetColumnFilter(flex.Columns[“Image”]);
columnFilter.FilterType = FilterType.None;

// 在标识符列上禁用值过滤器
columnFilter = gridFilter.GetColumnFilter(flex.Columns[“ID”]);
columnFilter.FilterType = FilterType.Condition;

zxc9089 发表于 2019-5-20 11:53:06

本帖最后由 zxc9089 于 2019-5-20 15:21 编辑





在demo中按照方法配置了实现了列不可自定义Filter功能, 但是在列头上还是有一个空白占用了可用空间,导致列头无法正常显示

Richard.Ma 发表于 2019-5-20 16:12:40

按照你需求的功能,可以在开发包这个demo中找到
文档\ComponentOne Samples\WPF\C1.WPF.FlexGrid\CS\ColumnFilter

对其中的代码做了一点调整,加了一个你说的TextBox,然后绑定了如下的事件代码
这个就完全符合你的需求
      private void _Textboxcolor_TextChanged(object sender, TextChangedEventArgs e)
      {
            // get grid filter
            var f = C1FlexGridFilterService.GetFlexGridFilter(_flex);

            // customize color column filter
            var c = _flex.Columns["Color"];
            var cf = f.GetColumnFilter(c);
            if (cf != null)
            {
                cf.ValueFilter.Clear();
                var c1 = cf.ConditionFilter.Condition1;
                c1.Operator = ConditionOperator.Contains;
                c1.Parameter = (sender as TextBox).Text;

            }
            // apply changes
            f.Apply();
页: [1]
查看完整版本: FlexGrid列筛选功能问题