提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|其它|编辑:郝浩|2012-01-05 00:06:05.000|阅读 989 次
概述:过滤是DataGrid这样的表格控件的基本功能之一,也是非常重要的特性。微软提供的标准DataGrid相信大家都很熟悉了。本文要解析的不是 标准DataGrid,而是Silverlight和WPF平台下的C1DataGrid的过滤功能。经过多年的打磨,最新的ComponentOne 2011 v3版中的C1DataGrid已经具有了很多不同以往的过滤技术,每一种都很容易使用而且功能强大。这里将会展示几个例子和效果图,希望对大家有用。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
过滤是DataGrid这样的表格控件的基本功能之一,也是非常重要的特性。微软提供的标准DataGrid相信大家都很熟悉了。本文要解析的不是 标准DataGrid,而是Silverlight和WPF平台下的C1DataGrid的过滤功能。经过多年的打磨,最新的ComponentOne 2011 v3版中的C1DataGrid已经具有了很多不同以往的过滤技术,每一种都很容易使用而且功能强大。这里将会展示几个例子和效果图,希望对大家有用。
默认过滤
把一个IEnumerable数据源绑定到C1DataGrid上,设置CanUserFilter为true,就可以看到默认条件下的过滤结果。过滤器会根据用户输入的条件,列出过滤结果,比如“大于10”或者“包含R”。
根据不同列的数据类型,C1DataGrid还提供了特殊的过滤器。比如日期类型或者布尔类型的列中,可以选择适合的条件过滤器,如下图所示:
高级过滤器
C1.Silverlight.DataGrid.Filters.dll中提供了很多高级的过滤功能。这样做的好处是,如果你需要这些高级特性,那么就添加该dll到项目里。如果不需要,那它不会对项目的size造成影响。
行过滤
另外一种基本的过滤功能可通过典型的过滤行来实现。过滤行是由一些文本框组成的固定行,用户可以在改行的文本框中输入过滤条件。在 C1DataGrid中可以通过TopRows或BottomRows非常便捷的实现行过滤功能,只需为其添加一个DataGridFilterRow类 型的元素(请确保你添加了C1.Sliverlight.DataGrid.Filters程序集的引用),然后设置固定行数即可。
<c1:C1DataGrid Name="c1DataGrid1" CanUserFilter="True" FrozenTopRowsCount="1"
RowHeight="30">
<c1:C1DataGrid.TopRows>
<c1:DataGridFilterRow />
</c1:C1DataGrid.TopRows>
</c1:C1DataGrid>
全文过滤
C1DataGrid提供了对整个Grid中文本进行过滤的功能,用户可一次性完成所有列的检索或过滤操作。而这一切,只需为FullTextSearchBehavior属性绑定一个控件,例如:TextBox控件,它就会为你自动完成剩下的工作。
<c1:C1DataGrid Name="c1DataGrid1" CanUserFilter="True" Margin="0,27,0,0">
<c1:C1FullTextSearchBehavior.FullTextSearchBehavior>
<c1:C1FullTextSearchBehavior Filter=
"{Binding ElementName=textBox1, Path=Text}" />
</c1:C1FullTextSearchBehavior.FullTextSearchBehavior>
</c1:C1DataGrid>
<TextBox Height="23" HorizontalAlignment="Left"
Name="textBox1" VerticalAlignment="Top" Width="177" />
多值过滤
C1DataGrid提供了类似于Excel那样的多值过滤功能。可作为过滤条件的值以选择列表的形式显示,用户可以选择那些值显示,那些不显示,这为拥有唯一或者重复值的列提供了非常有效的过滤方式(例如:类别或类型列)。你可以通过两种方法实现多值过滤功能。
第一种方法是利用C1DataGrid内置的高级过滤特性。只需为Grid添加 一个C1AdvancedFiltersBehavior类,这样就为Grid添加了内置的高级过滤功能,包括多值过滤。
<c1:C1DataGrid Name="c1DataGrid1"
AutoGenerateColumns="False"
CanUserFilter="True" CanUserAddRows="False" RowHeight="30">
<!—设置高级过滤器-->
<c1:C1AdvancedFiltersBehavior.AdvancedFiltersBehavior>
<c1:C1AdvancedFiltersBehavior />
</c1:C1AdvancedFiltersBehavior.AdvancedFiltersBehavior>
</c1:C1DataGrid>
通过C1AdvancedFiltersBehavior为Grid中的列添加了简单过滤和多值过滤功能,这并没有使用太多的控件,是为整个Grid添加高级过滤功能的最简单方法。
第二种方法会灵活一些。你可以将高级过滤功能关闭,直接在XAML或代码中为每一列指定特殊的过滤类型,下面演示如何为某一列添加多值过滤功能:
<c1:C1DataGrid Name="c1DataGrid1"
ItemsSource="{Binding Flavors}" AutoGenerateColumns="False" CanUserFilter="True">
<c1:C1DataGrid.Columns>
<c1:DataGridTextColumn Header="Flavor" Binding="{Binding FlavorName}" FilterMemberPath="FlavorName">
<!—添加多值过滤器-->
<c1:DataGridTextColumn.Filter>
<c1:DataGridContentFilter >
<c1:DataGridMultiValueFilter ItemsSource=
"{Binding Flavors}" DisplayMemberPath=
"FlavorName" ValueMemberPath="FlavorName" MaxHeight="200"/>
</c1:DataGridContentFilter>
</c1:DataGridTextColumn.Filter>
</c1:DataGridTextColumn>
<!—其它列信息-->
<c1:DataGridCheckBoxColumn Header=
"Has Nuts" Binding="{Binding IncludesNuts}" FilterMemberPath="IncludesNuts" />
<c1:DataGridTextColumn Header=
"Percent" Format="p1" Binding=
"{Binding Percent}" FilterMemberPath="Percent"/>
</c1:C1DataGrid.Columns>
</c1:C1DataGrid>
需要注意的是,上面的方法是为多值过滤器指定ItemsSource来实现的。
多条件过滤
多条件过滤是对缺省过滤的一种扩展,你可以一次设置多个过滤条件,过滤条件的个数没有限制,可根据用户的需求设置相应的数量。
就像上面的多值过滤一样,你可以在XAML中通过设置Filter属性来定制过滤功能。例如,你可以为Text类型的列添加C1MultiLineTextFilter来实现多条件过滤功能(也可以为DateTime和Numeric类型的列设置多条件过滤)。
<c1:C1DataGrid Name="c1DataGrid1"
AutoGenerateColumns="False" CanUserFilter="True">
<c1:C1DataGrid.Columns>
<c1:DataGridTextColumn Header="Flavor"
Binding="{Binding FlavorName}" FilterMemberPath="FlavorName">
<!—添加条件过滤器-->
<c1:DataGridTextColumn.Filter>
<c1:DataGridContentFilter >
<c1:DataGridMultiLineTextFilter />
</c1:DataGridContentFilter>
</c1:DataGridTextColumn.Filter>
</c1:DataGridTextColumn>
<!—添加其它列 -->
...
</c1:C1DataGrid.Columns>
</c1:C1DataGrid>
组合过滤
通过组合过滤,用户可以一次设置多种类型的过滤条件。C1DataGrid本身支持多种类型的过滤器,你可以使用DataGridFilterList为每列添加多种类型的过滤器。
例如,你想同时使用文本和数字过滤器,就可以通过下面的代码来实现:
<c1:C1DataGrid Name="c1DataGrid1" ItemsSource="{Binding Flavors}" AutoGenerateColumns="False" CanUserFilter="True">
<c1:C1DataGrid.Columns>
<c1:DataGridTextColumn Header="Flavor"
Binding="{Binding FlavorName}" FilterMemberPath="FlavorName" />
<c1:DataGridCheckBoxColumn Header="Has Nuts"
Binding="{Binding IncludesNuts}" FilterMemberPath="IncludesNuts" />
<c1:DataGridTextColumn Header="Percent"
Format="p1" Binding="{Binding Percent}" FilterMemberPath="Percent">
<c1:DataGridTextColumn.Filter>
<c1:DataGridContentFilter >
<c1:DataGridFilterList>
<c1:DataGridTextFilter />
<c1:DataGridNumericFilter Format="p1" />
</c1:DataGridFilterList>
</c1:DataGridContentFilter>
</c1:DataGridTextColumn.Filter>
</c1:DataGridTextColumn>
</c1:C1DataGrid.Columns>
</c1:C1DataGrid>
为模板列添加过滤功能
模板列不支持缺省的过滤功能,但可以通过设置Filter属性来定制过滤功能。例如,通过下面的代码可以为模板列添加一个多值过滤功能:
<c1:C1DataGrid Name="c1DataGrid1"
ItemsSource="{Binding Flavors}" AutoGenerateColumns="False" CanUserFilter="True">
<c1:C1DataGrid.Columns>
<!—添加模板列-->
<c1:DataGridTemplateColumn Header="Flavor"
FilterMemberPath="FlavorName">
<c1:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding FlavorName}" />
</DataTemplate>
</c1:DataGridTemplateColumn.CellTemplate>
<!—添加多值过滤器-->
<c1:DataGridTemplateColumn.Filter>
<c1:DataGridContentFilter >
<c1:DataGridMultiValueFilter ItemsSource="{Binding Flavors}" MaxHeight="200" DisplayMemberPath="FlavorName" ValueMemberPath="FlavorName" />
</c1:DataGridContentFilter>
</c1:DataGridTemplateColumn.Filter>
</c1:DataGridTemplateColumn>
<!—添加其它列-->
...
</c1:C1DataGrid.Columns>
</c1:C1DataGrid>
通过代码设置过滤功能
有些情况下,需要在代码中控制过滤功能,C1DataGrid为此提供了两个非常重要的事件。FilterLoading在每列的过滤器加载后触发,你可以在这个事件中设置自定义的过滤器。FilterOpened在过滤器被打开之后触发,此时可以动态设置一些选项的值。
下面演示如何使用代码设置一个多值过滤器:
private void dataGrid_FilterLoading(object sender,
DataGridColumnEditableValueEventArgs<IDataGridFilter> e)
{
var column = e.Column;
var multiValueFilter = new DataGridMultiValueFilter();
(e.Value as DataGridFilter).InnerControl = multiValueFilter;
}
下面演示如何使用代码为多值列表设置数据:
void dataGrid_FilterOpened(object sender,
DataGridColumnValueEventArgs<IDataGridFilter> e)
{
var boundColumn = e.Column as DataGridBoundColumn;
if (boundColumn == null)
return;
// 创建并设置多值过滤器
var filterControl = (DataGridMultiValueFilter)((DataGridFilter)e.Value).InnerControl;
filterControl.ItemsSource = items.Select(selector).Distinct().OrderBy(o => o);
}
用户自定义过滤器
C1DataGrid的过滤功能不局限于上面提到的几种方式,你可以实现你需要的自定义过滤器,然后将这个过滤器设置给特定的列。根据数据的不同,你可以设置一个树形结构、直方图或者日历形式的过滤器,你可以在C1DataGrid的例子中找到相应的实现。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
文章转载自:网络转载面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢