对于CompoentOne FlexGrid for WinForms来说,默认通过AllowFiltering属性,就可以使用内置的过滤功能。一旦过滤打开,每一列都可以编辑过滤,只要点击列头上的过滤图标,过滤的下拉框就会打开展示出来。
通过下拉框,可以过滤数据的值。
本文就来介绍如何自定义过滤下拉框满足更多的需求。
实现步骤
基本的,获取过滤下拉框作为单独的窗体,然后再ToolScrip上添加按钮执行期望的操作(例如,排序)。
方法包含如下步骤:
第一步
第一步是检查列头的过滤图标是否被点击。
为了达到这个目的,需要在MouseClick事件里使用HitTest方法。
1: private void C1FlexGrid1_MouseClick(object sender, MouseEventArgs e)
2: {
3: if (C1FlexGrid1.HitTest(e.Location).Type == C1.Win.C1FlexGrid.HitTestTypeEnum.FilterIcon)
4: {
5: CustomFilterMenu();
6: HitTestInfo hti = C1FlexGrid1.HitTest(e.X, e.Y);
7: col = hti.Column;
8: }
9: }
'CustomFilterMenu' 方法中包含完成的自定义过滤下拉框代码。
第二步:
当检查过过滤图标是否被点击,就该自定义下拉框,这是通过在菜单的ToolScrip里添加按钮实现。
过滤下拉菜单是C1FlexGrid的对象,可以直接获取。
因此过滤下拉菜单可以作为窗体继承实现功能。
使用”OpenForms”类检查打开的窗体。
在OpenForms集合中,每次检查名字和类型是否是”FilterEditorForm”和“C1.Win.C1FlexGrid.FilterEditorForm”
1: private void CustomFilterMenu()
2: {
3: foreach (Form frm in Application.OpenForms)
4: {
5: if (frm.Name == "FilterEditorForm" & frm.GetType().ToString() == "C1.Win.C1FlexGrid.FilterEditorForm")
6: {
7: //Perform the desired functionality
8: }
9: }
10: }
第三步
在获取到FilterEditorForm后,可以通过需求改变它。
作为我们继承实现了排序,我们需要在窗体的Tools次日拍添加两个按钮,排序就可以在表格实现。
1: if (frm.Name == "FilterEditorForm" & frm.GetType().ToString() == "C1.Win.C1FlexGrid.FilterEditorForm")
2: {
3: filterForm = frm;
4: filterForm.Width = filterForm.Width + 70;
5: frm.Refresh();
6:
7: foreach (object item in filterForm.Controls)
8: {
9: dynamic ts = item as ToolStrip;
10: if (ts != null)
11: {
12: ToolStripButton tsASC = new ToolStripButton();
13: ToolStripButton tsDESC = new ToolStripButton();
14:
15: tsASC.Text = "Sort Asc";
16: tsDESC.Text = "Sort Desc";
17:
18: tsASC.Image = global::C1FlexGrid_CustomFilterMenu_CS.Properties.Resources.Upimage;
19: tsDESC.Image = global::C1FlexGrid_CustomFilterMenu_CS.Properties.Resources.Downimage;
20:
21: tsASC.ImageScaling = ToolStripItemImageScaling.None;
22: tsASC.ImageTransparentColor = Color.White;
23:
24: tsDESC.ImageScaling = ToolStripItemImageScaling.None;
25: tsDESC.ImageTransparentColor = Color.White;
26:
27: tsASC.Click += tsASC_Click;
28: tsDESC.Click += tsDESC_Click;
29:
30: ts.Items.Add(tsASC);
31: ts.Items.Add(tsDESC);
32: }
33:
34: }
35:
36: frm.Refresh();
37: }
38: }
39: }
40:
41: private void tsASC_Click(object sender, EventArgs e)
42: {
43: C1FlexGrid1.Sort(SortFlags.Ascending, col);
44: filterForm.Close();
45: }
46:
47: private void tsDESC_Click(object sender, EventArgs e)
48: {
49: C1FlexGrid1.Sort(SortFlags.Descending, col);
50: filterForm.Close();
51: }
到此,就完成了需求的功能。
示例下载:
C1FlexGrid_CustomFilterMenu_CS.zip
更多资源
如果你对C1FlexGrid感兴趣,请到我们的官网下载最新版本:/download/?pid=3
如果你有疑问,可以到GCDN论坛获得技术支持:http://gcdn.grapecity.com.cn/showforum-68.html
ComponentOne Enterprise | 下载试用
ComponentOne 是一套专注于企业 .NET开发、支持 .NET Core 平台,并完美集成于 Visual Studio 的第三方控件集,包含 300 多种 .NET开发控件,提供表格数据管理、数据可视化、报表和文档、日程安排、输入和编辑、导航和布局、系统提升工具等七大功能,被誉为“.NET开发的‘瑞士军刀’”。
ComponentOne 为您提供专业的产品咨询服务,并由技术支持工程师为您1对1解答。>> 发帖提问
葡萄城热门产品


