对于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解答。>> 发帖提问
葡萄城热门产品