对于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
关于葡萄城
葡萄城是专业的软件开发技术和低代码平台提供商,以“赋能开发者”为使命,致力于通过表格控件、低代码和BI等各类软件开发工具和服务,一站式满足开发者需求,帮助企业提升开发效率并创新开发模式。葡萄城开发技术始于1980年,40余年来始终聚焦软件开发技术,有深厚的技术积累和丰富的产品线。是业界能够同时赋能软件开发和低代码开发的企业。凭借过硬的产品能力、活跃的用户社区和丰富的伙伴生态,与超过3000家合作伙伴紧密合作,产品广泛应用于信息和软件服务、制造、交通运输、建筑、金融、能源、教育、公共管理等支柱产业。
葡萄城热门产品


