找回密码
 立即注册

QQ登录

只需一步,快速开始

visualmaster

银牌会员

16

主题

64

帖子

3892

积分

银牌会员

积分
3892

活字格认证

visualmaster
银牌会员   /  发表于:2015-4-3 14:48  /   查看:7997  /  回复:7
我加了一个CellFactory ,然后filter 就不出来了,有办法让CellFactory 不应用到列头嘛?

还有就是 我设置格式化的列过滤时是格式化的公式,能变成值嘛? 还有里边都是英文,不是中文是怎么回事呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

7 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2015-4-3 16:22:00
沙发
回复 1楼visualmaster的帖子

1.我这里不太清楚你是如何设置的。如果你是先设置了Filter,然后自定义CellFactory的话,这就是设计。
如果在设置filter之后应用cell factory, 就会使得filter factory不可用,你也不能得到dropdowns。
最简单的方式就是在设置custom factory之后,再设置filter。
希望这么讲你能清楚,如果有问题可以提出。

2.请问你格式化的公式是如何设置的?
有关列的Filter,以及如何去设置,都可以参考随机安装示例:
\Documents\ComponentOne Samples\Studio for WPF\C1.WPF.FlexGrid\CS\ColumnFilter

3.过滤的汉化和系统相关,请问你使用的是中文的操作系统和VisualStudio么?
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
visualmaster
银牌会员   /  发表于:2015-4-3 16:34:00
板凳


如图,Filter 是在Xaml 里的,列绑定是写的附加依赖属性绑定的
  1. public static readonly DependencyProperty BindingColumnsProperty =
  2.             DependencyProperty.RegisterAttached("BindingColumns", typeof(ObservableCollection<ColumnConfig>),
  3.                 typeof(FlexGridExtensions), new PropertyMetadata(null, BindingColumnsChanged));
复制代码


在BindingColumnsChanged事件里

  1. private static void BindingColumnsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
  2.         {
  3.             var bindingColumns = e.NewValue as ObservableCollection<ColumnConfig>;
  4.             if(bindingColumns != null)
  5.             {
  6.                 var c1FlexGrid = d as C1FlexGrid;
  7.                 if(c1FlexGrid != null)
  8.                 {
  9.                     foreach(var bindingColumn in bindingColumns)
  10.                     {
  11.                         c1FlexGrid.Columns.Add(new Column
  12.                         {
  13.                             Header = bindingColumn.HeaderName,
  14.                             Binding = new Binding(bindingColumn.ColumnName),
  15.                             Width = new GridLength(bindingColumn.Width),
  16.                             Format = bindingColumn.FormatString,
  17.                             ToolTip = bindingColumn.HeaderDescription,
  18.                             HeaderBackground = new SolidColorBrush(ColorConverter.ConvertFromString(bindingColumn.HeaderColorString) is Color ? (Color)ColorConverter.ConvertFromString(bindingColumn.HeaderColorString) : Colors.White),
  19.                         });
  20.                     }


  21.                     c1FlexGrid.CellFactory = new FlexGridCellFactory();
  22.                 }
  23.             }
  24.         }
复制代码



使用系统WIN10 10041中文简体版,VS2013 update4 中文简体版

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-4-3 18:43:00
地板
回复 3楼visualmaster的帖子

你好。
中文问题目前我们还未对WIN10做支持,建议你在其他系统下使用。

有关过滤这里,我看你的代码,应该是显示的Format,然后过滤这里显示Value,但是过滤之后的数据是不是也要按Value去过滤呢?
仅从这里来看,需要自定义Filter。
你可以参考如下例子:
\Documents\ComponentOne Samples\Studio for WPF\C1.WPF.FlexGrid\CS\ColumnFilter\bin\Debug
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
visualmaster
银牌会员   /  发表于:2015-4-5 23:31:00
5#
显示英文的问题不是win10的原因,win8.1 也一样出现,是根据什么显示英文和中文的呢?

上个您说的先CellFactory,然后再写Filter,是说把Xaml 的写法改成代码的方式吗?
c1FlexGrid.CellFactory = new FlexGridCellFactory(); 这个之后怎么写?
var filter = C1FlexGridFilterService.GetFlexGridFilter(c1FlexGrid);
filter.Apply();
加了这2句没好使

如果自定义Filter的话
  1. var c = c1FlexGrid.Columns[&quot;Color&quot;];
  2.                     var cf = filter.GetColumnFilter(c);
  3.                     if(cf != null)
  4.                     {
  5.                         cf.ConditionFilter.Clear();
  6.                         cf.ValueFilter.Values = new string[] { &quot;Blue&quot; };
  7.                     }
复制代码

这里的Values 怎么获取到Format 之前的所有值,循环一遍一个一个添加嘛?
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-4-7 11:08:00
6#
回复 5楼visualmaster的帖子

1.显示英文的问题不是win10的原因,win8.1 也一样出现,是根据什么显示英文和中文的呢?
--&gt;是根据系统的语言自动显示的。

2.上个您说的先CellFactory,然后再写Filter,是说把Xaml 的写法改成代码的方式吗?
--&gt;是的,通过代码来实现。
在应用CustomCellFactory 之后,创建一个C1.WPF.FlexGrid.C1FlexGridFilter示例,然后设置给FlexGrid。
代码参考:
  1. c1Flexgrid1.CellFactory = new MyCellFactory();
  2. C1.Silverlight.FlexGrid.C1FlexGridFilter filter = new C1.Silverlight.FlexGrid.C1FlexGridFilter();
  3. filter.Owner = c1Flexgrid1;
复制代码


3.自定义Filter这里的Values 怎么获取到Format 之前的所有值.
--&gt;你提供这段代码的意思是添加Color列的Filter。并且过滤出值是Blue的内容。
Values指的是满足过滤条件的值。
如果希望展示所有Values,请参考如下代码:
  1. // customize color column filter to show only Blue
  2. var c = c1FlexGrid1.Columns[&quot;Color&quot;];
  3. var cf = _filter.GetColumnFilter(c);
  4. cf.FilterType = FilterType.Value;

  5. _filter.Apply();
复制代码
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
visualmaster
银牌会员   /  发表于:2015-4-7 15:45:00
7#
回复 6楼Alice的帖子

c1FlexGrid.CellFactory = new FlexGridCellFactory();

C1FlexGridFilter filter = new C1FlexGridFilter();
filter.Owner = c1FlexGrid;

var c1 = c1FlexGrid.Columns[&quot;Color&quot;];
var cf1 = filter.GetColumnFilter(c1);
cf1.FilterType = FilterType.Value;

filter.Apply();

这样写了,这列还是不是数值呢?是写的顺序错了吗?
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-4-7 17:20:00
8#
回复 7楼visualmaster的帖子

如果依然有问题,请提供必然重现问题的Demo。
我们帮你看看具体问题时什么。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部